LCOV - code coverage report
Current view: top level - monetdb5/modules/kernel - aggr.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 262 460 57.0 %
Date: 2024-11-14 20:04:02 Functions: 40 116 34.5 %

          Line data    Source code
       1             : /*
       2             :  * SPDX-License-Identifier: MPL-2.0
       3             :  *
       4             :  * This Source Code Form is subject to the terms of the Mozilla Public
       5             :  * License, v. 2.0.  If a copy of the MPL was not distributed with this
       6             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       7             :  *
       8             :  * Copyright 2024 MonetDB Foundation;
       9             :  * Copyright August 2008 - 2023 MonetDB B.V.;
      10             :  * Copyright 1997 - July 2008 CWI.
      11             :  */
      12             : 
      13             : #include "monetdb_config.h"
      14             : #include "mal.h"
      15             : #include "mal_exception.h"
      16             : #include "aggr.h"
      17             : 
      18             : /*
      19             :  * grouped aggregates
      20             :  */
      21             : static str
      22       20930 : AGGRgrouped_bat_or_val(bat *retval1, bat *retval2, const bat *bid,
      23             :                                            const bat *gid, const bat *eid, const bat *sid,
      24             :                                            bool skip_nils, int scale, int tp,
      25             :                                            BAT *(*grpfunc1)(BAT *, BAT *, BAT *, BAT *, int, bool),
      26             :                                            gdk_return(*grpfunc2)(BAT **, BAT **, BAT *, BAT *,
      27             :                                                                                          BAT *, BAT *, int, bool, int),
      28             :                                            BAT * (*quantilefunc)(BAT *, BAT *, BAT *, BAT *, int,
      29             :                                                                                          double, bool), const bat *quantile,
      30             :                                            const double *quantile_val, const char *malfunc)
      31             : {
      32       20930 :         BAT *b, *g = NULL, *e = NULL, *s = NULL, *bn = NULL, *cnts = NULL, *q = NULL;
      33       20930 :         double qvalue;
      34             : 
      35             :         /* exactly one of grpfunc1, grpfunc2 and quantilefunc is non-NULL */
      36       20930 :         assert((grpfunc1 != NULL) + (grpfunc2 != NULL) + (quantilefunc != NULL) == 1);
      37             : 
      38             :         /* if retval2 is non-NULL, we must have grpfunc2 */
      39       20930 :         assert(retval2 == NULL || grpfunc2 != NULL);
      40             :         /* only quantiles need a quantile BAT */
      41       20930 :         assert((quantilefunc == NULL) == (quantile == NULL && quantile_val == NULL));
      42             : 
      43       20930 :         b = BATdescriptor(*bid);
      44       20930 :         if (b == NULL ||
      45       20930 :                 (gid && !is_bat_nil(*gid) && (g = BATdescriptor(*gid)) == NULL) ||
      46       20930 :                 (eid && !is_bat_nil(*eid) && (e = BATdescriptor(*eid)) == NULL) ||
      47       20930 :                 (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) ||
      48          22 :                 (quantile && !is_bat_nil(*quantile) && (q = BATdescriptor(*quantile)) == NULL)) {
      49           0 :                 BBPreclaim(b);
      50           0 :                 BBPreclaim(g);
      51           0 :                 BBPreclaim(e);
      52           0 :                 BBPreclaim(s);
      53           0 :                 BBPreclaim(q);
      54           0 :                 throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
      55             :         }
      56       20930 :         if (tp == TYPE_any &&
      57          43 :                 (grpfunc1 == BATgroupmedian ||
      58          40 :                  grpfunc1 == BATgroupmedian_avg ||
      59           3 :                  quantilefunc == BATgroupquantile ||
      60             :                  quantilefunc == BATgroupquantile_avg))
      61          72 :                 tp = b->ttype;
      62             : 
      63       20930 :         if (grpfunc1) {
      64       20643 :                 bn = (*grpfunc1) (b, g, e, s, tp, skip_nils);
      65         287 :         } else if (quantilefunc) {
      66          40 :                 if (!quantile_val) {
      67          22 :                         assert(BATcount(q) > 0 || BATcount(b) == 0);
      68          22 :                         assert(q->ttype == TYPE_dbl);
      69          22 :                         if (BATcount(q) == 0) {
      70             :                                 qvalue = 0.5;
      71             :                         } else {
      72          19 :                                 MT_lock_set(&q->theaplock);
      73          19 :                                 qvalue = ((const dbl *) Tloc(q, 0))[0];
      74          19 :                                 MT_lock_unset(&q->theaplock);
      75          19 :                                 if (qvalue < 0 || qvalue > 1) {
      76           6 :                                         BBPunfix(b->batCacheid);
      77           6 :                                         BBPreclaim(g);
      78           6 :                                         BBPreclaim(e);
      79           6 :                                         BBPreclaim(s);
      80           6 :                                         BBPunfix(q->batCacheid);
      81           6 :                                         throw(MAL, malfunc,
      82             :                                                   "quantile value of %f is not in range [0,1]", qvalue);
      83             :                                 }
      84             :                         }
      85          16 :                         BBPunfix(q->batCacheid);
      86             :                 } else {
      87          18 :                         qvalue = *(quantile_val);
      88             :                 }
      89          34 :                 bn = (*quantilefunc) (b, g, e, s, tp, qvalue, skip_nils);
      90         377 :         } else if ((*grpfunc2) (&bn, retval2 ? &cnts : NULL, b, g, e, s, tp,
      91             :                                                         skip_nils, scale) != GDK_SUCCEED) {
      92           0 :                 bn = NULL;
      93             :         }
      94             : 
      95       20923 :         BBPunfix(b->batCacheid);
      96       20924 :         BBPreclaim(g);
      97       20924 :         BBPreclaim(e);
      98       20924 :         BBPreclaim(s);
      99       20924 :         if (bn == NULL)
     100           4 :                 throw(MAL, malfunc, GDK_EXCEPTION);
     101       20920 :         *retval1 = bn->batCacheid;
     102       20920 :         BBPkeepref(bn);
     103       20916 :         if (retval2) {
     104         116 :                 *retval2 = cnts->batCacheid;
     105         116 :                 BBPkeepref(cnts);
     106             :         }
     107             :         return MAL_SUCCEED;
     108             : }
     109             : 
     110             : static str
     111       20912 : AGGRgrouped(bat *retval1, bat *retval2, const bat *bid, const bat *gid,
     112             :                         const bat *eid, const bat *sid, bool skip_nils, int scale, int tp,
     113             :                         BAT *(*grpfunc1)(BAT *, BAT *, BAT *, BAT *, int, bool),
     114             :                         gdk_return(*grpfunc2)(BAT **, BAT **, BAT *, BAT *, BAT *, BAT *,
     115             :                                                                   int, bool, int), BAT * (*quantilefunc)(BAT *,
     116             :                                                                                                                                                  BAT *,
     117             :                                                                                                                                                  BAT *,
     118             :                                                                                                                                                  BAT *,
     119             :                                                                                                                                                  int,
     120             :                                                                                                                                                  double,
     121             :                                                                                                                                                  bool),
     122             :                         const bat *quantile, const char *malfunc)
     123             : {
     124       20912 :         return AGGRgrouped_bat_or_val(retval1, retval2, bid, gid, eid, sid,
     125             :                                                                   skip_nils, scale, tp, grpfunc1, grpfunc2,
     126             :                                                                   quantilefunc, quantile, NULL, malfunc);
     127             : }
     128             : 
     129             : static str
     130           0 : AGGRsum3_bte(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     131             : {
     132           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_bte,
     133             :                                            BATgroupsum, NULL, NULL, NULL, "aggr.sum");
     134             : }
     135             : 
     136             : static str
     137           0 : AGGRsum3_sht(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     138             : {
     139           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_sht,
     140             :                                            BATgroupsum, NULL, NULL, NULL, "aggr.sum");
     141             : }
     142             : 
     143             : static str
     144           0 : AGGRsum3_int(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     145             : {
     146           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_int,
     147             :                                            BATgroupsum, NULL, NULL, NULL, "aggr.sum");
     148             : }
     149             : 
     150             : str
     151           0 : AGGRsum3_lng(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     152             : {
     153           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_lng,
     154             :                                            BATgroupsum, NULL, NULL, NULL, "aggr.sum");
     155             : }
     156             : 
     157             : #ifdef HAVE_HGE
     158             : str
     159           0 : AGGRsum3_hge(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     160             : {
     161           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_hge,
     162             :                                            BATgroupsum, NULL, NULL, NULL, "aggr.sum");
     163             : }
     164             : #endif
     165             : 
     166             : static str
     167           0 : AGGRsum3_flt(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     168             : {
     169           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_flt,
     170             :                                            BATgroupsum, NULL, NULL, NULL, "aggr.sum");
     171             : }
     172             : 
     173             : static str
     174           0 : AGGRsum3_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     175             : {
     176           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     177             :                                            BATgroupsum, NULL, NULL, NULL, "aggr.sum");
     178             : }
     179             : 
     180             : static str
     181           0 : AGGRprod3_bte(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     182             : {
     183           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_bte,
     184             :                                            BATgroupprod, NULL, NULL, NULL, "aggr.prod");
     185             : }
     186             : 
     187             : static str
     188           0 : AGGRprod3_sht(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     189             : {
     190           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_sht,
     191             :                                            BATgroupprod, NULL, NULL, NULL, "aggr.prod");
     192             : }
     193             : 
     194             : static str
     195           0 : AGGRprod3_int(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     196             : {
     197           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_int,
     198             :                                            BATgroupprod, NULL, NULL, NULL, "aggr.prod");
     199             : }
     200             : 
     201             : static str
     202           0 : AGGRprod3_lng(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     203             : {
     204           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_lng,
     205             :                                            BATgroupprod, NULL, NULL, NULL, "aggr.prod");
     206             : }
     207             : 
     208             : #ifdef HAVE_HGE
     209             : static str
     210           0 : AGGRprod3_hge(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     211             : {
     212           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_hge,
     213             :                                            BATgroupprod, NULL, NULL, NULL, "aggr.prod");
     214             : }
     215             : #endif
     216             : 
     217             : static str
     218           0 : AGGRprod3_flt(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     219             : {
     220           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_flt,
     221             :                                            BATgroupprod, NULL, NULL, NULL, "aggr.prod");
     222             : }
     223             : 
     224             : static str
     225           0 : AGGRprod3_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     226             : {
     227           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     228             :                                            BATgroupprod, NULL, NULL, NULL, "aggr.prod");
     229             : }
     230             : 
     231             : static str
     232           0 : AGGRavg13_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     233             : {
     234           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     235             :                                            NULL, BATgroupavg, NULL, NULL, "aggr.avg");
     236             : }
     237             : 
     238             : static str
     239           0 : AGGRavg23_dbl(bat *retval1, bat *retval2, const bat *bid, const bat *gid,
     240             :                           const bat *eid)
     241             : {
     242           0 :         return AGGRgrouped(retval1, retval2, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     243             :                                            NULL, BATgroupavg, NULL, NULL, "aggr.avg");
     244             : }
     245             : 
     246             : static str
     247           0 : AGGRavg14_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     248             :                           int *scale)
     249             : {
     250           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, *scale,
     251             :                                            TYPE_dbl, NULL, BATgroupavg, NULL, NULL, "aggr.avg");
     252             : }
     253             : 
     254             : static str
     255           0 : AGGRavg24_dbl(bat *retval1, bat *retval2, const bat *bid, const bat *gid,
     256             :                           const bat *eid, int *scale)
     257             : {
     258           0 :         return AGGRgrouped(retval1, retval2, bid, gid, eid, NULL, true, *scale,
     259             :                                            TYPE_dbl, NULL, BATgroupavg, NULL, NULL, "aggr.avg");
     260             : }
     261             : 
     262             : static str
     263           0 : AGGRstdev3_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     264             : {
     265           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     266             :                                            BATgroupstdev_sample, NULL, NULL, NULL, "aggr.stdev");
     267             : }
     268             : 
     269             : static str
     270           0 : AGGRstdevp3_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     271             : {
     272           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     273             :                                            BATgroupstdev_population, NULL, NULL, NULL,
     274             :                                            "aggr.stdevp");
     275             : }
     276             : 
     277             : static str
     278           0 : AGGRvariance3_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     279             : {
     280           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     281             :                                            BATgroupvariance_sample, NULL, NULL, NULL,
     282             :                                            "aggr.variance");
     283             : }
     284             : 
     285             : static str
     286           0 : AGGRvariancep3_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     287             : {
     288           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_dbl,
     289             :                                            BATgroupvariance_population, NULL, NULL, NULL,
     290             :                                            "aggr.variancep");
     291             : }
     292             : 
     293             : static str
     294           0 : AGGRcount3(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     295             :                    const bit *ignorenils)
     296             : {
     297           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *ignorenils, 0,
     298             :                                            TYPE_lng, BATgroupcount, NULL, NULL, NULL, "aggr.count");
     299             : }
     300             : 
     301             : static str
     302           0 : AGGRcount3nonils(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     303             : {
     304           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, true, 0, TYPE_lng,
     305             :                                            BATgroupcount, NULL, NULL, NULL, "aggr.count");
     306             : }
     307             : 
     308             : static str
     309           0 : AGGRcount3nils(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     310             : {
     311           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, false, 0, TYPE_lng,
     312             :                                            BATgroupcount, NULL, NULL, NULL, "aggr.count");
     313             : }
     314             : 
     315             : #include "algebra.h"                  /* for ALGprojection */
     316             : static str
     317           1 : AGGRmin3(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     318             : {
     319           1 :         bat tmpid;
     320           1 :         str err;
     321             : 
     322           1 :         err = AGGRgrouped(&tmpid, NULL, bid, gid, eid, NULL, false, 0, TYPE_oid,
     323             :                                           BATgroupmin, NULL, NULL, NULL, "aggr.min");
     324           1 :         if (err == MAL_SUCCEED) {
     325           1 :                 err = ALGprojection(retval, &tmpid, bid);
     326           1 :                 BBPrelease(tmpid);
     327             :         }
     328           1 :         return err;
     329             : }
     330             : 
     331             : static str
     332           1 : AGGRmax3(bat *retval, const bat *bid, const bat *gid, const bat *eid)
     333             : {
     334           1 :         bat tmpid;
     335           1 :         str err;
     336             : 
     337           1 :         err = AGGRgrouped(&tmpid, NULL, bid, gid, eid, NULL, false, 0, TYPE_oid,
     338             :                                           BATgroupmax, NULL, NULL, NULL, "aggr.max");
     339           1 :         if (err == MAL_SUCCEED) {
     340           1 :                 err = ALGprojection(retval, &tmpid, bid);
     341           1 :                 BBPrelease(tmpid);
     342             :         }
     343           1 :         return err;
     344             : }
     345             : 
     346             : static str
     347           9 : AGGRsubsum_bte(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     348             :                            const bit *skip_nils)
     349             : {
     350           9 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     351             :                                            0, TYPE_bte, BATgroupsum, NULL,
     352             :                                            NULL, NULL, "aggr.subsum");
     353             : }
     354             : 
     355             : static str
     356          11 : AGGRsubsum_sht(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     357             :                            const bit *skip_nils)
     358             : {
     359          11 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     360             :                                            0, TYPE_sht, BATgroupsum, NULL,
     361             :                                            NULL, NULL, "aggr.subsum");
     362             : }
     363             : 
     364             : static str
     365         805 : AGGRsubsum_int(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     366             :                            const bit *skip_nils)
     367             : {
     368         805 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     369             :                                            0, TYPE_int, BATgroupsum, NULL,
     370             :                                            NULL, NULL, "aggr.subsum");
     371             : }
     372             : 
     373             : static str
     374        3528 : AGGRsubsum_lng(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     375             :                            const bit *skip_nils)
     376             : {
     377        3528 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     378             :                                            0, TYPE_lng, BATgroupsum, NULL,
     379             :                                            NULL, NULL, "aggr.subsum");
     380             : }
     381             : 
     382             : #ifdef HAVE_HGE
     383             : static str
     384        1496 : AGGRsubsum_hge(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     385             :                            bit *skip_nils)
     386             : {
     387        1496 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     388             :                                            0, TYPE_hge, BATgroupsum, NULL,
     389             :                                            NULL, NULL, "aggr.subsum");
     390             : }
     391             : #endif
     392             : 
     393             : static str
     394           0 : AGGRsubsum_flt(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     395             :                            const bit *skip_nils)
     396             : {
     397           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     398             :                                            0, TYPE_flt, BATgroupsum, NULL,
     399             :                                            NULL, NULL, "aggr.subsum");
     400             : }
     401             : 
     402             : static str
     403          47 : AGGRsubsum_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     404             :                            const bit *skip_nils)
     405             : {
     406          47 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     407             :                                            0, TYPE_dbl, BATgroupsum, NULL,
     408             :                                            NULL, NULL, "aggr.subsum");
     409             : }
     410             : 
     411             : static str
     412           0 : AGGRsubsumcand_bte(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     413             :                                    const bat *sid, const bit *skip_nils)
     414             : {
     415           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     416             :                                            0, TYPE_bte, BATgroupsum, NULL,
     417             :                                            NULL, NULL, "aggr.subsum");
     418             : }
     419             : 
     420             : static str
     421           0 : AGGRsubsumcand_sht(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     422             :                                    const bat *sid, const bit *skip_nils)
     423             : {
     424           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     425             :                                            0, TYPE_sht, BATgroupsum, NULL,
     426             :                                            NULL, NULL, "aggr.subsum");
     427             : }
     428             : 
     429             : static str
     430           0 : AGGRsubsumcand_int(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     431             :                                    const bat *sid, const bit *skip_nils)
     432             : {
     433           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     434             :                                            0, TYPE_int, BATgroupsum, NULL,
     435             :                                            NULL, NULL, "aggr.subsum");
     436             : }
     437             : 
     438             : static str
     439           0 : AGGRsubsumcand_lng(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     440             :                                    const bat *sid, const bit *skip_nils)
     441             : {
     442           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     443             :                                            0, TYPE_lng, BATgroupsum, NULL,
     444             :                                            NULL, NULL, "aggr.subsum");
     445             : }
     446             : 
     447             : #ifdef HAVE_HGE
     448             : static str
     449           0 : AGGRsubsumcand_hge(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     450             :                                    const bat *sid, const bit *skip_nils)
     451             : {
     452           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     453             :                                            0, TYPE_hge, BATgroupsum, NULL,
     454             :                                            NULL, NULL, "aggr.subsum");
     455             : }
     456             : #endif
     457             : 
     458             : static str
     459           0 : AGGRsubsumcand_flt(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     460             :                                    const bat *sid, const bit *skip_nils)
     461             : {
     462           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     463             :                                            0, TYPE_flt, BATgroupsum, NULL,
     464             :                                            NULL, NULL, "aggr.subsum");
     465             : }
     466             : 
     467             : static str
     468           0 : AGGRsubsumcand_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     469             :                                    const bat *sid, const bit *skip_nils)
     470             : {
     471           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     472             :                                            0, TYPE_dbl, BATgroupsum, NULL,
     473             :                                            NULL, NULL, "aggr.subsum");
     474             : }
     475             : 
     476             : static str
     477           0 : AGGRsubprod_bte(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     478             :                                 const bit *skip_nils)
     479             : {
     480           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     481             :                                            0, TYPE_bte, BATgroupprod, NULL,
     482             :                                            NULL, NULL, "aggr.subprod");
     483             : }
     484             : 
     485             : static str
     486           0 : AGGRsubprod_sht(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     487             :                                 const bit *skip_nils)
     488             : {
     489           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     490             :                                            0, TYPE_sht, BATgroupprod, NULL,
     491             :                                            NULL, NULL, "aggr.subprod");
     492             : }
     493             : 
     494             : static str
     495           0 : AGGRsubprod_int(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     496             :                                 const bit *skip_nils)
     497             : {
     498           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     499             :                                            0, TYPE_int, BATgroupprod, NULL,
     500             :                                            NULL, NULL, "aggr.subprod");
     501             : }
     502             : 
     503             : static str
     504           0 : AGGRsubprod_lng(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     505             :                                 const bit *skip_nils)
     506             : {
     507           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     508             :                                            0, TYPE_lng, BATgroupprod, NULL,
     509             :                                            NULL, NULL, "aggr.subprod");
     510             : }
     511             : 
     512             : #ifdef HAVE_HGE
     513             : static str
     514           0 : AGGRsubprod_hge(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     515             :                                 const bit *skip_nils)
     516             : {
     517           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     518             :                                            0, TYPE_hge, BATgroupprod, NULL,
     519             :                                            NULL, NULL, "aggr.subprod");
     520             : }
     521             : #endif
     522             : 
     523             : static str
     524           0 : AGGRsubprod_flt(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     525             :                                 const bit *skip_nils)
     526             : {
     527           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     528             :                                            0, TYPE_flt, BATgroupprod, NULL,
     529             :                                            NULL, NULL, "aggr.subprod");
     530             : }
     531             : 
     532             : static str
     533          12 : AGGRsubprod_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     534             :                                 const bit *skip_nils)
     535             : {
     536          12 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     537             :                                            0, TYPE_dbl, BATgroupprod, NULL,
     538             :                                            NULL, NULL, "aggr.subprod");
     539             : }
     540             : 
     541             : static str
     542           0 : AGGRsubprodcand_bte(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     543             :                                         const bat *sid, const bit *skip_nils)
     544             : {
     545           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     546             :                                            0, TYPE_bte, BATgroupprod, NULL,
     547             :                                            NULL, NULL, "aggr.subprod");
     548             : }
     549             : 
     550             : static str
     551           0 : AGGRsubprodcand_sht(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     552             :                                         const bat *sid, const bit *skip_nils)
     553             : {
     554           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     555             :                                            0, TYPE_sht, BATgroupprod, NULL,
     556             :                                            NULL, NULL, "aggr.subprod");
     557             : }
     558             : 
     559             : static str
     560           0 : AGGRsubprodcand_int(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     561             :                                         const bat *sid, const bit *skip_nils)
     562             : {
     563           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     564             :                                            0, TYPE_int, BATgroupprod, NULL,
     565             :                                            NULL, NULL, "aggr.subprod");
     566             : }
     567             : 
     568             : static str
     569           0 : AGGRsubprodcand_lng(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     570             :                                         const bat *sid, const bit *skip_nils)
     571             : {
     572           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     573             :                                            0, TYPE_lng, BATgroupprod, NULL,
     574             :                                            NULL, NULL, "aggr.subprod");
     575             : }
     576             : 
     577             : #ifdef HAVE_HGE
     578             : static str
     579           0 : AGGRsubprodcand_hge(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     580             :                                         const bat *sid, const bit *skip_nils)
     581             : {
     582           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     583             :                                            0, TYPE_hge, BATgroupprod, NULL,
     584             :                                            NULL, NULL, "aggr.subprod");
     585             : }
     586             : #endif
     587             : 
     588             : static str
     589           0 : AGGRsubprodcand_flt(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     590             :                                         const bat *sid, const bit *skip_nils)
     591             : {
     592           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     593             :                                            0, TYPE_flt, BATgroupprod, NULL,
     594             :                                            NULL, NULL, "aggr.subprod");
     595             : }
     596             : 
     597             : static str
     598           0 : AGGRsubprodcand_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     599             :                                         const bat *sid, const bit *skip_nils)
     600             : {
     601           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     602             :                                            0, TYPE_dbl, BATgroupprod, NULL,
     603             :                                            NULL, NULL, "aggr.subprod");
     604             : }
     605             : 
     606             : static str
     607         130 : AGGRsubavg1_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     608             :                                 const bit *skip_nils)
     609             : {
     610         130 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     611             :                                            0, TYPE_dbl, NULL, BATgroupavg,
     612             :                                            NULL, NULL, "aggr.subavg");
     613             : }
     614             : 
     615             : static str
     616           0 : AGGRsubavg1cand_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     617             :                                         const bat *sid, const bit *skip_nils)
     618             : {
     619           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     620             :                                            0, TYPE_dbl, NULL, BATgroupavg,
     621             :                                            NULL, NULL, "aggr.subavg");
     622             : }
     623             : 
     624             : static str
     625         117 : AGGRsubavg2_dbl(bat *retval1, bat *retval2, const bat *bid, const bat *gid,
     626             :                                 const bat *eid, const bit *skip_nils)
     627             : {
     628         117 :         return AGGRgrouped(retval1, retval2, bid, gid, eid, NULL, *skip_nils,
     629             :                                            0, TYPE_dbl, NULL, BATgroupavg,
     630             :                                            NULL, NULL, "aggr.subavg");
     631             : }
     632             : 
     633             : static str
     634           0 : AGGRsubavg2cand_dbl(bat *retval1, bat *retval2, const bat *bid, const bat *gid,
     635             :                                         const bat *eid, const bat *sid, const bit *skip_nils)
     636             : {
     637           0 :         return AGGRgrouped(retval1, retval2, bid, gid, eid, sid, *skip_nils,
     638             :                                            0, TYPE_dbl, NULL, BATgroupavg,
     639             :                                            NULL, NULL, "aggr.subavg");
     640             : }
     641             : 
     642             : static str
     643           0 : AGGRsubavg1s_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     644             :                                  const bit *skip_nils, const int *scale)
     645             : {
     646           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     647             :                                            *scale, TYPE_dbl, NULL, BATgroupavg,
     648             :                                            NULL, NULL, "aggr.subavg");
     649             : }
     650             : 
     651             : static str
     652           0 : AGGRsubavg1scand_dbl(bat *retval, const bat *bid, const bat *gid,
     653             :                                          const bat *eid, const bat *sid, const bit *skip_nils,
     654             :                                          const int *scale)
     655             : {
     656           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     657             :                                            *scale, TYPE_dbl, NULL, BATgroupavg,
     658             :                                            NULL, NULL, "aggr.subavg");
     659             : }
     660             : 
     661             : static str
     662           0 : AGGRsubavg2s_dbl(bat *retval1, bat *retval2, const bat *bid, const bat *gid,
     663             :                                  const bat *eid, const bit *skip_nils, const int *scale)
     664             : {
     665           0 :         return AGGRgrouped(retval1, retval2, bid, gid, eid, NULL, *skip_nils,
     666             :                                            *scale, TYPE_dbl, NULL, BATgroupavg,
     667             :                                            NULL, NULL, "aggr.subavg");
     668             : }
     669             : 
     670             : static str
     671           0 : AGGRsubavg2scand_dbl(bat *retval1, bat *retval2, const bat *bid, const bat *gid,
     672             :                                          const bat *eid, const bat *sid, const bit *skip_nils,
     673             :                                          const int *scale)
     674             : {
     675           0 :         return AGGRgrouped(retval1, retval2, bid, gid, eid, sid, *skip_nils,
     676             :                                            *scale, TYPE_dbl, NULL, BATgroupavg,
     677             :                                            NULL, NULL, "aggr.subavg");
     678             : }
     679             : 
     680             : static str
     681         145 : AGGRavg3(bat *retval1, bat *retval2, bat *retval3, const bat *bid,
     682             :                  const bat *gid, const bat *eid, const bat *sid, const bit *skip_nils)
     683             : {
     684         145 :         BAT *b, *g, *e, *s, *avgs, *cnts, *rems;
     685         145 :         gdk_return rc;
     686             : 
     687         145 :         b = BATdescriptor(*bid);
     688         145 :         g = gid != NULL && !is_bat_nil(*gid) ? BATdescriptor(*gid) : NULL;
     689         145 :         e = eid != NULL && !is_bat_nil(*eid) ? BATdescriptor(*eid) : NULL;
     690         145 :         s = sid != NULL && !is_bat_nil(*sid) ? BATdescriptor(*sid) : NULL;
     691             : 
     692         145 :         if (b == NULL ||
     693         145 :                 (gid != NULL && !is_bat_nil(*gid) && g == NULL) ||
     694         145 :                 (eid != NULL && !is_bat_nil(*eid) && e == NULL) ||
     695         145 :                 (sid != NULL && !is_bat_nil(*sid) && s == NULL)) {
     696           0 :                 BBPreclaim(b);
     697           0 :                 BBPreclaim(g);
     698           0 :                 BBPreclaim(e);
     699           0 :                 BBPreclaim(s);
     700           0 :                 throw(MAL, "aggr.subavg", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
     701             :         }
     702             : 
     703         145 :         rc = BATgroupavg3(&avgs, &rems, &cnts, b, g, e, s, *skip_nils);
     704             : 
     705         145 :         BBPunfix(b->batCacheid);
     706         145 :         BBPreclaim(g);
     707         145 :         BBPreclaim(e);
     708         145 :         BBPreclaim(s);
     709         145 :         if (rc != GDK_SUCCEED)
     710           0 :                 throw(MAL, "aggr.subavg", GDK_EXCEPTION);
     711         145 :         *retval1 = avgs->batCacheid;
     712         145 :         BBPkeepref(avgs);
     713         145 :         *retval2 = rems->batCacheid;
     714         145 :         BBPkeepref(rems);
     715         145 :         *retval3 = cnts->batCacheid;
     716         145 :         BBPkeepref(cnts);
     717         145 :         return MAL_SUCCEED;
     718             : }
     719             : 
     720             : static str
     721          19 : AGGRavg3comb(bat *retval1, const bat *bid, const bat *rid, const bat *cid,
     722             :                          const bat *gid, const bat *eid, const bit *skip_nils)
     723             : {
     724          19 :         BAT *b, *r, *c, *g, *e, *bn;
     725             : 
     726          19 :         b = BATdescriptor(*bid);
     727          19 :         r = BATdescriptor(*rid);
     728          19 :         c = BATdescriptor(*cid);
     729          19 :         g = gid != NULL && !is_bat_nil(*gid) ? BATdescriptor(*gid) : NULL;
     730          19 :         e = eid != NULL && !is_bat_nil(*eid) ? BATdescriptor(*eid) : NULL;
     731             : 
     732          19 :         if (b == NULL ||
     733          19 :                 r == NULL ||
     734          19 :                 c == NULL ||
     735          19 :                 (gid != NULL && !is_bat_nil(*gid) && g == NULL) ||
     736          19 :                 (eid != NULL && !is_bat_nil(*eid) && e == NULL)) {
     737           0 :                 BBPreclaim(b);
     738           0 :                 BBPreclaim(r);
     739           0 :                 BBPreclaim(c);
     740           0 :                 BBPreclaim(g);
     741           0 :                 BBPreclaim(e);
     742           0 :                 throw(MAL, "aggr.subavg", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
     743             :         }
     744             : 
     745          19 :         bn = BATgroupavg3combine(b, r, c, g, e, *skip_nils);
     746             : 
     747          19 :         BBPunfix(b->batCacheid);
     748          19 :         BBPunfix(r->batCacheid);
     749          19 :         BBPunfix(c->batCacheid);
     750          19 :         BBPreclaim(g);
     751          19 :         BBPreclaim(e);
     752          19 :         if (bn == NULL)
     753           0 :                 throw(MAL, "aggr.subavg", GDK_EXCEPTION);
     754          19 :         *retval1 = bn->batCacheid;
     755          19 :         BBPkeepref(bn);
     756          19 :         return MAL_SUCCEED;
     757             : }
     758             : 
     759             : static str
     760           7 : AGGRsubstdev_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     761             :                                  const bit *skip_nils)
     762             : {
     763           7 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     764             :                                            0, TYPE_dbl, BATgroupstdev_sample,
     765             :                                            NULL, NULL, NULL, "aggr.substdev");
     766             : }
     767             : 
     768             : static str
     769           0 : AGGRsubstdevcand_dbl(bat *retval, const bat *bid, const bat *gid,
     770             :                                          const bat *eid, const bat *sid, const bit *skip_nils)
     771             : {
     772           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     773             :                                            0, TYPE_dbl, BATgroupstdev_sample,
     774             :                                            NULL, NULL, NULL, "aggr.substdev");
     775             : }
     776             : 
     777             : static str
     778           5 : AGGRsubstdevp_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     779             :                                   const bit *skip_nils)
     780             : {
     781           5 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     782             :                                            0, TYPE_dbl,
     783             :                                            BATgroupstdev_population, NULL, NULL, NULL,
     784             :                                            "aggr.substdevp");
     785             : }
     786             : 
     787             : static str
     788           0 : AGGRsubstdevpcand_dbl(bat *retval, const bat *bid, const bat *gid,
     789             :                                           const bat *eid, const bat *sid, const bit *skip_nils)
     790             : {
     791           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     792             :                                            0, TYPE_dbl,
     793             :                                            BATgroupstdev_population,
     794             :                                            NULL, NULL, NULL, "aggr.substdevp");
     795             : }
     796             : 
     797             : static str
     798           1 : AGGRsubvariance_dbl(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     799             :                                         const bit *skip_nils)
     800             : {
     801           1 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     802             :                                            0, TYPE_dbl, BATgroupvariance_sample,
     803             :                                            NULL, NULL, NULL, "aggr.subvariance");
     804             : }
     805             : 
     806             : static str
     807           0 : AGGRsubvariancecand_dbl(bat *retval, const bat *bid, const bat *gid,
     808             :                                                 const bat *eid, const bat *sid, const bit *skip_nils)
     809             : {
     810           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     811             :                                            0, TYPE_dbl, BATgroupvariance_sample,
     812             :                                            NULL, NULL, NULL, "aggr.subvariance");
     813             : }
     814             : 
     815             : static str
     816           4 : AGGRsubvariancep_dbl(bat *retval, const bat *bid, const bat *gid,
     817             :                                          const bat *eid, const bit *skip_nils)
     818             : {
     819           4 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     820             :                                            0, TYPE_dbl,
     821             :                                            BATgroupvariance_population, NULL,
     822             :                                            NULL, NULL, "aggr.subvariancep");
     823             : }
     824             : 
     825             : static str
     826           0 : AGGRsubvariancepcand_dbl(bat *retval, const bat *bid, const bat *gid,
     827             :                                                  const bat *eid, const bat *sid, const bit *skip_nils)
     828             : {
     829           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     830             :                                            0, TYPE_dbl,
     831             :                                            BATgroupvariance_population, NULL,
     832             :                                            NULL, NULL, "aggr.subvariancep");
     833             : }
     834             : 
     835             : static str
     836       13709 : AGGRsubcount(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     837             :                          const bit *skip_nils)
     838             : {
     839       13709 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     840             :                                            0, TYPE_lng, BATgroupcount, NULL, NULL,
     841             :                                            NULL, "aggr.subcount");
     842             : }
     843             : 
     844             : static str
     845           0 : AGGRsubcountcand(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     846             :                                  const bat *sid, const bit *skip_nils)
     847             : {
     848           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     849             :                                            0, TYPE_lng, BATgroupcount, NULL,
     850             :                                            NULL, NULL, "aggr.subcount");
     851             : }
     852             : 
     853             : static str
     854           0 : AGGRsubmin(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     855             :                    const bit *skip_nils)
     856             : {
     857           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     858             :                                            0, TYPE_oid, BATgroupmin, NULL,
     859             :                                            NULL, NULL, "aggr.submin");
     860             : }
     861             : 
     862             : static str
     863           0 : AGGRsubmincand(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     864             :                            const bat *sid, const bit *skip_nils)
     865             : {
     866           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     867             :                                            0, TYPE_oid, BATgroupmin, NULL,
     868             :                                            NULL, NULL, "aggr.submin");
     869             : }
     870             : 
     871             : static str
     872           0 : AGGRsubmax(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     873             :                    const bit *skip_nils)
     874             : {
     875           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     876             :                                            0, TYPE_oid, BATgroupmax, NULL,
     877             :                                            NULL, NULL, "aggr.submax");
     878             : }
     879             : 
     880             : static str
     881           0 : AGGRsubmaxcand(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     882             :                            const bat *sid, const bit *skip_nils)
     883             : {
     884           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     885             :                                            0, TYPE_oid, BATgroupmax, NULL,
     886             :                                            NULL, NULL, "aggr.submax");
     887             : }
     888             : 
     889             : static str
     890         428 : AGGRsubmincand_val(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     891             :                                    const bat *sid, const bit *skip_nils)
     892             : {
     893         428 :         bat tmpid;
     894         428 :         str err;
     895             : 
     896         428 :         err = AGGRgrouped(&tmpid, NULL, bid, gid, eid, sid, *skip_nils,
     897             :                                           0, TYPE_oid, BATgroupmin, NULL, NULL, NULL,
     898             :                                           "aggr.submin");
     899         428 :         if (err == MAL_SUCCEED) {
     900         428 :                 err = ALGprojection(retval, &tmpid, bid);
     901         428 :                 BBPrelease(tmpid);
     902             :         }
     903         428 :         return err;
     904             : }
     905             : 
     906             : static str
     907         428 : AGGRsubmin_val(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     908             :                            const bit *skip_nils)
     909             : {
     910         428 :         return AGGRsubmincand_val(retval, bid, gid, eid, NULL, skip_nils);
     911             : }
     912             : 
     913             : static str
     914         547 : AGGRsubmaxcand_val(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     915             :                                    const bat *sid, const bit *skip_nils)
     916             : {
     917         547 :         bat tmpid;
     918         547 :         str err;
     919             : 
     920         547 :         err = AGGRgrouped(&tmpid, NULL, bid, gid, eid, sid, *skip_nils,
     921             :                                           0, TYPE_oid, BATgroupmax, NULL, NULL, NULL,
     922             :                                           "aggr.submax");
     923         547 :         if (err == MAL_SUCCEED) {
     924         547 :                 err = ALGprojection(retval, &tmpid, bid);
     925         547 :                 BBPrelease(tmpid);
     926             :         }
     927         547 :         return err;
     928             : }
     929             : 
     930             : static str
     931         547 : AGGRsubmax_val(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     932             :                            const bit *skip_nils)
     933             : {
     934         547 :         return AGGRsubmaxcand_val(retval, bid, gid, eid, NULL, skip_nils);
     935             : }
     936             : 
     937             : static str
     938          22 : AGGRmedian(void *retval, const bat *bid)
     939             : {
     940          22 :         str err;
     941          22 :         bat rval;
     942          22 :         if ((err = AGGRgrouped(&rval, NULL, bid, NULL, NULL, NULL, true,
     943             :                                                    0, TYPE_any, BATgroupmedian, NULL,
     944             :                                                    NULL, NULL, "aggr.submedian")) == MAL_SUCCEED) {
     945          22 :                 oid pos = 0;
     946          22 :                 err = ALGfetchoid(retval, &rval, &pos);
     947          22 :                 BBPrelease(rval);
     948             :         }
     949          22 :         return err;
     950             : }
     951             : 
     952             : static str
     953           7 : AGGRsubmedian(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     954             :                           const bit *skip_nils)
     955             : {
     956           7 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
     957             :                                            0, TYPE_any, BATgroupmedian, NULL,
     958             :                                            NULL, NULL, "aggr.submedian");
     959             : }
     960             : 
     961             : static str
     962           0 : AGGRsubmediancand(bat *retval, const bat *bid, const bat *gid, const bat *eid,
     963             :                                   const bat *sid, const bit *skip_nils)
     964             : {
     965           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
     966             :                                            0, TYPE_any, BATgroupmedian, NULL,
     967             :                                            NULL, NULL, "aggr.submedian");
     968             : }
     969             : 
     970             : /* quantile functions, could make median functions obsolete completely */
     971             : static str
     972           8 : AGGRquantile(void *retval, const bat *bid, const bat *qid)
     973             : {
     974           8 :         str err;
     975           8 :         bat rval;
     976           8 :         if ((err = AGGRgrouped(&rval, NULL, bid, NULL, NULL, NULL, true,
     977             :                                                    0, TYPE_any, NULL, NULL, BATgroupquantile,
     978             :                                                    qid, "aggr.subquantile")) == MAL_SUCCEED) {
     979           6 :                 oid pos = 0;
     980           6 :                 err = ALGfetchoid(retval, &rval, &pos);
     981           6 :                 BBPrelease(rval);
     982             :         }
     983           8 :         return err;
     984             : }
     985             : 
     986             : static str
     987          16 : AGGRquantile_cst(void *retval, const bat *bid, const dbl *q)
     988             : {
     989          16 :         str err;
     990          16 :         bat rval;
     991          16 :         if ((err = AGGRgrouped_bat_or_val(&rval, NULL, bid, NULL, NULL, NULL, true,
     992             :                                                                           0, TYPE_any, NULL, NULL, BATgroupquantile,
     993             :                                                                           NULL, q,
     994             :                                                                           "aggr.subquantile")) == MAL_SUCCEED) {
     995          14 :                 oid pos = 0;
     996          14 :                 err = ALGfetchoid(retval, &rval, &pos);
     997          14 :                 BBPrelease(rval);
     998             :         }
     999          16 :         return err;
    1000             : }
    1001             : 
    1002             : static str
    1003          13 : AGGRsubquantile(bat *retval, const bat *bid, const bat *quantile,
    1004             :                                 const bat *gid, const bat *eid, const bit *skip_nils)
    1005             : {
    1006          13 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
    1007             :                                            0, TYPE_any, NULL, NULL, BATgroupquantile,
    1008             :                                            quantile, "aggr.subquantile");
    1009             : }
    1010             : 
    1011             : static str
    1012           0 : AGGRsubquantilecand(bat *retval, const bat *bid, const bat *quantile,
    1013             :                                         const bat *gid, const bat *eid, const bat *sid,
    1014             :                                         const bit *skip_nils)
    1015             : {
    1016           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
    1017             :                                            0, TYPE_any, NULL, NULL, BATgroupquantile,
    1018             :                                            quantile, "aggr.subquantile");
    1019             : }
    1020             : 
    1021             : static str
    1022           2 : AGGRmedian_avg(dbl *retval, const bat *bid)
    1023             : {
    1024           2 :         str err;
    1025           2 :         bat rval;
    1026           2 :         if ((err = AGGRgrouped(&rval, NULL, bid, NULL, NULL, NULL, true,
    1027             :                                                    0, TYPE_any, BATgroupmedian_avg, NULL,
    1028             :                                                    NULL, NULL, "aggr.submedian_avg")) == MAL_SUCCEED) {
    1029           2 :                 oid pos = 0;
    1030           2 :                 err = ALGfetchoid(retval, &rval, &pos);
    1031           2 :                 BBPrelease(rval);
    1032             :         }
    1033           2 :         return err;
    1034             : }
    1035             : 
    1036             : static str
    1037           1 : AGGRsubmedian_avg(bat *retval, const bat *bid, const bat *gid, const bat *eid,
    1038             :                                   const bit *skip_nils)
    1039             : {
    1040           1 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
    1041             :                                            0, TYPE_any, BATgroupmedian_avg, NULL,
    1042             :                                            NULL, NULL, "aggr.submedian_avg");
    1043             : }
    1044             : 
    1045             : static str
    1046           0 : AGGRsubmediancand_avg(bat *retval, const bat *bid, const bat *gid,
    1047             :                                           const bat *eid, const bat *sid, const bit *skip_nils)
    1048             : {
    1049           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
    1050             :                                            0, TYPE_any, BATgroupmedian_avg, NULL,
    1051             :                                            NULL, NULL, "aggr.submedian_avg");
    1052             : }
    1053             : 
    1054             : /* quantile functions, could make median functions obsolete completely */
    1055             : static str
    1056           0 : AGGRquantile_avg(dbl *retval, const bat *bid, const bat *qid)
    1057             : {
    1058           0 :         str err;
    1059           0 :         bat rval;
    1060           0 :         if ((err = AGGRgrouped(&rval, NULL, bid, NULL, NULL, NULL, true,
    1061             :                                                    0, TYPE_any, NULL, NULL, BATgroupquantile_avg,
    1062             :                                                    qid, "aggr.subquantile_avg")) == MAL_SUCCEED) {
    1063           0 :                 oid pos = 0;
    1064           0 :                 err = ALGfetchoid(retval, &rval, &pos);
    1065           0 :                 BBPrelease(rval);
    1066             :         }
    1067           0 :         return err;
    1068             : }
    1069             : 
    1070             : static str
    1071           2 : AGGRquantile_avg_cst(dbl *retval, const bat *bid, const dbl *q)
    1072             : {
    1073           2 :         str err;
    1074           2 :         bat rval;
    1075           2 :         if ((err = AGGRgrouped_bat_or_val(&rval, NULL, bid, NULL, NULL, NULL, true,
    1076             :                                                                           0, TYPE_any, NULL, NULL,
    1077             :                                                                           BATgroupquantile_avg, NULL, q,
    1078             :                                                                           "aggr.subquantile_avg")) == MAL_SUCCEED) {
    1079           2 :                 oid pos = 0;
    1080           2 :                 err = ALGfetchoid(retval, &rval, &pos);
    1081           2 :                 BBPrelease(rval);
    1082             :         }
    1083           2 :         return err;
    1084             : }
    1085             : 
    1086             : static str
    1087           1 : AGGRsubquantile_avg(bat *retval, const bat *bid, const bat *quantile,
    1088             :                                         const bat *gid, const bat *eid, const bit *skip_nils)
    1089             : {
    1090           1 :         return AGGRgrouped(retval, NULL, bid, gid, eid, NULL, *skip_nils,
    1091             :                                            0, TYPE_any, NULL, NULL, BATgroupquantile_avg,
    1092             :                                            quantile, "aggr.subquantile_avg");
    1093             : }
    1094             : 
    1095             : static str
    1096           0 : AGGRsubquantilecand_avg(bat *retval, const bat *bid, const bat *quantile,
    1097             :                                                 const bat *gid, const bat *eid, const bat *sid,
    1098             :                                                 const bit *skip_nils)
    1099             : {
    1100           0 :         return AGGRgrouped(retval, NULL, bid, gid, eid, sid, *skip_nils,
    1101             :                                            0, TYPE_any, NULL, NULL, BATgroupquantile_avg,
    1102             :                                            quantile, "aggr.subquantile_avg");
    1103             : }
    1104             : 
    1105             : static str
    1106          54 : AGGRgroup_str_concat(bat *retval1, const bat *bid, const bat *gid,
    1107             :                                          const bat *eid, const bat *sid, bool skip_nils,
    1108             :                                          const bat *sepid, const char *separator,
    1109             :                                          const char *malfunc)
    1110             : {
    1111          54 :         BAT *b, *g, *e, *s, *sep, *bn = NULL;
    1112             : 
    1113          54 :         b = BATdescriptor(*bid);
    1114          54 :         g = gid ? BATdescriptor(*gid) : NULL;
    1115          54 :         e = eid ? BATdescriptor(*eid) : NULL;
    1116          54 :         s = sid ? BATdescriptor(*sid) : NULL;
    1117          54 :         sep = sepid ? BATdescriptor(*sepid) : NULL;
    1118             : 
    1119          54 :         if (b == NULL || (gid != NULL && g == NULL) || (eid != NULL && e == NULL) ||
    1120          54 :                 (sid != NULL && s == NULL) || (sepid != NULL && sep == NULL)) {
    1121           0 :                 BBPreclaim(b);
    1122           0 :                 BBPreclaim(g);
    1123           0 :                 BBPreclaim(e);
    1124           0 :                 BBPreclaim(s);
    1125           0 :                 BBPreclaim(sep);
    1126           0 :                 throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
    1127             :         }
    1128             : 
    1129          54 :         bn = BATgroupstr_group_concat(b, g, e, s, sep, skip_nils, separator);
    1130             : 
    1131          54 :         BBPunfix(b->batCacheid);
    1132          54 :         BBPreclaim(g);
    1133          54 :         BBPreclaim(e);
    1134          54 :         BBPreclaim(s);
    1135          54 :         BBPreclaim(sep);
    1136          54 :         if (bn == NULL)
    1137           0 :                 throw(MAL, malfunc, GDK_EXCEPTION);
    1138          54 :         *retval1 = bn->batCacheid;
    1139          54 :         BBPkeepref(bn);
    1140          54 :         return MAL_SUCCEED;
    1141             : }
    1142             : 
    1143             : #define DEFAULT_SEPARATOR ","
    1144             : 
    1145             : static str
    1146           0 : AGGRstr_group_concat(bat *retval, const bat *bid, const bat *gid,
    1147             :                                          const bat *eid)
    1148             : {
    1149           0 :         return AGGRgroup_str_concat(retval, bid, gid, eid, NULL, true, NULL,
    1150             :                                                                 DEFAULT_SEPARATOR, "aggr.str_group_concat");
    1151             : }
    1152             : 
    1153             : static str
    1154          20 : AGGRsubstr_group_concat(bat *retval, const bat *bid, const bat *gid,
    1155             :                                                 const bat *eid, const bit *skip_nils)
    1156             : {
    1157          20 :         return AGGRgroup_str_concat(retval, bid, gid, eid, NULL, *skip_nils, NULL,
    1158             :                                                                 DEFAULT_SEPARATOR, "aggr.substr_group_concat");
    1159             : }
    1160             : 
    1161             : static str
    1162           0 : AGGRsubstr_group_concatcand(bat *retval, const bat *bid, const bat *gid,
    1163             :                                                         const bat *eid, const bat *sid,
    1164             :                                                         const bit *skip_nils)
    1165             : {
    1166           0 :         return AGGRgroup_str_concat(retval, bid, gid, eid, sid, *skip_nils, NULL,
    1167             :                                                                 DEFAULT_SEPARATOR, "aggr.substr_group_concat");
    1168             : }
    1169             : 
    1170             : static str
    1171           0 : AGGRstr_group_concat_sep(bat *retval, const bat *bid, const bat *sep,
    1172             :                                                  const bat *gid, const bat *eid)
    1173             : {
    1174           0 :         return AGGRgroup_str_concat(retval, bid, gid, eid, NULL, true, sep, NULL,
    1175           0 :                                                                 "aggr.str_group_concat_sep");;
    1176             : }
    1177             : 
    1178             : static str
    1179          34 : AGGRsubstr_group_concat_sep(bat *retval, const bat *bid, const bat *sep,
    1180             :                                                         const bat *gid, const bat *eid,
    1181             :                                                         const bit *skip_nils)
    1182             : {
    1183          34 :         return AGGRgroup_str_concat(retval, bid, gid, eid, NULL, *skip_nils, sep,
    1184             :                                                                 NULL, "aggr.substr_group_concat_sep");
    1185             : }
    1186             : 
    1187             : static str
    1188           0 : AGGRsubstr_group_concatcand_sep(bat *retval, const bat *bid, const bat *sep,
    1189             :                                                                 const bat *gid, const bat *eid, const bat *sid,
    1190             :                                                                 const bit *skip_nils)
    1191             : {
    1192           0 :         return AGGRgroup_str_concat(retval, bid, gid, eid, sid, *skip_nils, sep,
    1193             :                                                                 NULL, "aggr.substr_group_concat_sep");
    1194             : }
    1195             : 
    1196             : static str
    1197         109 : AGGRgrouped2(bat *retval, const bat *bid1, const bat *bid2, const bat *gid,
    1198             :                          const bat *eid, const bat *sid, bool skip_nils, int tp,
    1199             :                          BAT *(*func)(BAT *, BAT *, BAT *, BAT *, BAT *, int tp,
    1200             :                                                   bool skip_nils), const char *malfunc)
    1201             : {
    1202         109 :         BAT *b1, *b2, *g, *e, *s, *bn = NULL;
    1203             : 
    1204         109 :         assert(func != NULL);
    1205             : 
    1206         109 :         b1 = BATdescriptor(*bid1);
    1207         109 :         b2 = BATdescriptor(*bid2);
    1208         109 :         g = gid ? BATdescriptor(*gid) : NULL;
    1209         109 :         e = eid ? BATdescriptor(*eid) : NULL;
    1210         109 :         s = sid ? BATdescriptor(*sid) : NULL;
    1211             : 
    1212         109 :         if (b1 == NULL || b2 == NULL || (gid != NULL && g == NULL)
    1213         109 :                 || (eid != NULL && e == NULL) || (sid != NULL && s == NULL)) {
    1214           0 :                 BBPreclaim(b1);
    1215           0 :                 BBPreclaim(b2);
    1216           0 :                 BBPreclaim(g);
    1217           0 :                 BBPreclaim(e);
    1218           0 :                 BBPreclaim(s);
    1219           0 :                 throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
    1220             :         }
    1221             : 
    1222         109 :         if (b1->ttype != b2->ttype) {
    1223           0 :                 BBPunfix(b1->batCacheid);
    1224           0 :                 BBPunfix(b2->batCacheid);
    1225           0 :                 BBPreclaim(g);
    1226           0 :                 BBPreclaim(e);
    1227           0 :                 BBPreclaim(s);
    1228           0 :                 throw(MAL, malfunc,
    1229             :                           SQLSTATE(42000) "%s requires both arguments of the same type",
    1230             :                           malfunc);
    1231             :         }
    1232             : 
    1233         109 :         bn = (*func) (b1, b2, g, e, s, tp, skip_nils);
    1234             : 
    1235         109 :         BBPunfix(b1->batCacheid);
    1236         109 :         BBPunfix(b2->batCacheid);
    1237         109 :         BBPreclaim(g);
    1238         109 :         BBPreclaim(e);
    1239         109 :         BBPreclaim(s);
    1240         109 :         if (bn == NULL)
    1241           1 :                 throw(MAL, malfunc, GDK_EXCEPTION);
    1242         108 :         *retval = bn->batCacheid;
    1243         108 :         BBPkeepref(bn);
    1244         108 :         return MAL_SUCCEED;
    1245             : }
    1246             : 
    1247             : static str
    1248           0 : AGGRcovariance(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1249             :                            const bat *eid)
    1250             : {
    1251           0 :         return AGGRgrouped2(retval, b1, b2, gid, eid, NULL, true, TYPE_dbl,
    1252             :                                                 BATgroupcovariance_sample, "aggr.covariance");
    1253             : }
    1254             : 
    1255             : static str
    1256          30 : AGGRsubcovariance(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1257             :                                   const bat *eid, const bit *skip_nils)
    1258             : {
    1259          30 :         return AGGRgrouped2(retval, b1, b2, gid, eid, NULL, *skip_nils, TYPE_dbl,
    1260             :                                                 BATgroupcovariance_sample, "aggr.subcovariance");
    1261             : }
    1262             : 
    1263             : static str
    1264           0 : AGGRsubcovariancecand(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1265             :                                           const bat *eid, const bat *sid, const bit *skip_nils)
    1266             : {
    1267           0 :         return AGGRgrouped2(retval, b1, b2, gid, eid, sid, *skip_nils, TYPE_dbl,
    1268             :                                                 BATgroupcovariance_sample, "aggr.subcovariance");
    1269             : }
    1270             : 
    1271             : static str
    1272           0 : AGGRcovariancep(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1273             :                                 const bat *eid)
    1274             : {
    1275           0 :         return AGGRgrouped2(retval, b1, b2, gid, eid, NULL, true, TYPE_dbl,
    1276             :                                                 BATgroupcovariance_population, "aggr.covariancep");
    1277             : }
    1278             : 
    1279             : static str
    1280          30 : AGGRsubcovariancep(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1281             :                                    const bat *eid, const bit *skip_nils)
    1282             : {
    1283          30 :         return AGGRgrouped2(retval, b1, b2, gid, eid, NULL, *skip_nils, TYPE_dbl,
    1284             :                                                 BATgroupcovariance_population, "aggr.subcovariancep");
    1285             : }
    1286             : 
    1287             : static str
    1288           0 : AGGRsubcovariancepcand(bat *retval, const bat *b1, const bat *b2,
    1289             :                                            const bat *gid, const bat *eid, const bat *sid,
    1290             :                                            const bit *skip_nils)
    1291             : {
    1292           0 :         return AGGRgrouped2(retval, b1, b2, gid, eid, sid, *skip_nils, TYPE_dbl,
    1293             :                                                 BATgroupcovariance_population, "aggr.subcovariancep");
    1294             : }
    1295             : 
    1296             : static str
    1297           0 : AGGRcorr(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1298             :                  const bat *eid)
    1299             : {
    1300           0 :         return AGGRgrouped2(retval, b1, b2, gid, eid, NULL, true, TYPE_dbl,
    1301             :                                                 BATgroupcorrelation, "aggr.corr");
    1302             : }
    1303             : 
    1304             : static str
    1305          49 : AGGRsubcorr(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1306             :                         const bat *eid, const bit *skip_nils)
    1307             : {
    1308          49 :         return AGGRgrouped2(retval, b1, b2, gid, eid, NULL, *skip_nils, TYPE_dbl,
    1309             :                                                 BATgroupcorrelation, "aggr.subcorr");
    1310             : }
    1311             : 
    1312             : static str
    1313           0 : AGGRsubcorrcand(bat *retval, const bat *b1, const bat *b2, const bat *gid,
    1314             :                                 const bat *eid, const bat *sid, const bit *skip_nils)
    1315             : {
    1316           0 :         return AGGRgrouped2(retval, b1, b2, gid, eid, sid, *skip_nils, TYPE_dbl,
    1317             :                                                 BATgroupcorrelation, "aggr.subcorr");
    1318             : }
    1319             : 
    1320             : #include "mel.h"
    1321             : mel_func aggr_init_funcs[] = {
    1322             :  command("aggr", "sum", AGGRsum3_dbl, false, "Grouped tail sum on bte", args(1,4, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1323             :  command("aggr", "sum", AGGRsum3_bte, false, "Grouped tail sum on bte", args(1,4, batarg("",bte),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1324             :  command("aggr", "subsum", AGGRsubsum_bte, false, "Grouped sum aggregate", args(1,5, batarg("",bte),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1325             :  command("aggr", "subsum", AGGRsubsumcand_bte, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",bte),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1326             :  command("aggr", "prod", AGGRprod3_bte, false, "Grouped tail product on bte", args(1,4, batarg("",bte),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1327             :  command("aggr", "subprod", AGGRsubprod_bte, false, "Grouped product aggregate", args(1,5, batarg("",bte),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1328             :  command("aggr", "subprod", AGGRsubprodcand_bte, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",bte),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1329             :  command("aggr", "sum", AGGRsum3_sht, false, "Grouped tail sum on bte", args(1,4, batarg("",sht),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1330             :  command("aggr", "subsum", AGGRsubsum_sht, false, "Grouped sum aggregate", args(1,5, batarg("",sht),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1331             :  command("aggr", "subsum", AGGRsubsumcand_sht, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",sht),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1332             :  command("aggr", "prod", AGGRprod3_sht, false, "Grouped tail product on bte", args(1,4, batarg("",sht),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1333             :  command("aggr", "subprod", AGGRsubprod_sht, false, "Grouped product aggregate", args(1,5, batarg("",sht),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1334             :  command("aggr", "subprod", AGGRsubprodcand_sht, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",sht),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1335             :  command("aggr", "sum", AGGRsum3_int, false, "Grouped tail sum on bte", args(1,4, batarg("",int),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1336             :  command("aggr", "subsum", AGGRsubsum_int, false, "Grouped sum aggregate", args(1,5, batarg("",int),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1337             :  command("aggr", "subsum", AGGRsubsumcand_int, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",int),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1338             :  command("aggr", "prod", AGGRprod3_int, false, "Grouped tail product on bte", args(1,4, batarg("",int),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1339             :  command("aggr", "subprod", AGGRsubprod_int, false, "Grouped product aggregate", args(1,5, batarg("",int),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1340             :  command("aggr", "subprod", AGGRsubprodcand_int, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",int),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1341             :  command("aggr", "sum", AGGRsum3_lng, false, "Grouped tail sum on bte", args(1,4, batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1342             :  command("aggr", "subsum", AGGRsubsum_lng, false, "Grouped sum aggregate", args(1,5, batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1343             :  command("aggr", "subsum", AGGRsubsumcand_lng, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1344             :  command("aggr", "prod", AGGRprod3_lng, false, "Grouped tail product on bte", args(1,4, batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1345             :  command("aggr", "subprod", AGGRsubprod_lng, false, "Grouped product aggregate", args(1,5, batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1346             :  command("aggr", "subprod", AGGRsubprodcand_lng, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1347             :  command("aggr", "sum", AGGRsum3_dbl, false, "Grouped tail sum on sht", args(1,4, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1348             :  command("aggr", "sum", AGGRsum3_sht, false, "Grouped tail sum on sht", args(1,4, batarg("",sht),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1349             :  command("aggr", "subsum", AGGRsubsum_sht, false, "Grouped sum aggregate", args(1,5, batarg("",sht),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1350             :  command("aggr", "subsum", AGGRsubsumcand_sht, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",sht),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1351             :  command("aggr", "prod", AGGRprod3_sht, false, "Grouped tail product on sht", args(1,4, batarg("",sht),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1352             :  command("aggr", "subprod", AGGRsubprod_sht, false, "Grouped product aggregate", args(1,5, batarg("",sht),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1353             :  command("aggr", "subprod", AGGRsubprodcand_sht, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",sht),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1354             :  command("aggr", "sum", AGGRsum3_int, false, "Grouped tail sum on sht", args(1,4, batarg("",int),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1355             :  command("aggr", "subsum", AGGRsubsum_int, false, "Grouped sum aggregate", args(1,5, batarg("",int),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1356             :  command("aggr", "subsum", AGGRsubsumcand_int, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",int),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1357             :  command("aggr", "prod", AGGRprod3_int, false, "Grouped tail product on sht", args(1,4, batarg("",int),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1358             :  command("aggr", "subprod", AGGRsubprod_int, false, "Grouped product aggregate", args(1,5, batarg("",int),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1359             :  command("aggr", "subprod", AGGRsubprodcand_int, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",int),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1360             :  command("aggr", "sum", AGGRsum3_lng, false, "Grouped tail sum on sht", args(1,4, batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1361             :  command("aggr", "subsum", AGGRsubsum_lng, false, "Grouped sum aggregate", args(1,5, batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1362             :  command("aggr", "subsum", AGGRsubsumcand_lng, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1363             :  command("aggr", "prod", AGGRprod3_lng, false, "Grouped tail product on sht", args(1,4, batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1364             :  command("aggr", "subprod", AGGRsubprod_lng, false, "Grouped product aggregate", args(1,5, batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1365             :  command("aggr", "subprod", AGGRsubprodcand_lng, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1366             :  command("aggr", "sum", AGGRsum3_dbl, false, "Grouped tail sum on int", args(1,4, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1367             :  command("aggr", "sum", AGGRsum3_int, false, "Grouped tail sum on int", args(1,4, batarg("",int),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1368             :  command("aggr", "subsum", AGGRsubsum_int, false, "Grouped sum aggregate", args(1,5, batarg("",int),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1369             :  command("aggr", "subsum", AGGRsubsumcand_int, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",int),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1370             :  command("aggr", "prod", AGGRprod3_int, false, "Grouped tail product on int", args(1,4, batarg("",int),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1371             :  command("aggr", "subprod", AGGRsubprod_int, false, "Grouped product aggregate", args(1,5, batarg("",int),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1372             :  command("aggr", "subprod", AGGRsubprodcand_int, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",int),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1373             :  command("aggr", "sum", AGGRsum3_lng, false, "Grouped tail sum on int", args(1,4, batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1374             :  command("aggr", "subsum", AGGRsubsum_lng, false, "Grouped sum aggregate", args(1,5, batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1375             :  command("aggr", "subsum", AGGRsubsumcand_lng, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1376             :  command("aggr", "prod", AGGRprod3_lng, false, "Grouped tail product on int", args(1,4, batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1377             :  command("aggr", "subprod", AGGRsubprod_lng, false, "Grouped product aggregate", args(1,5, batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1378             :  command("aggr", "subprod", AGGRsubprodcand_lng, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1379             :  command("aggr", "sum", AGGRsum3_dbl, false, "Grouped tail sum on lng", args(1,4, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1380             :  command("aggr", "sum", AGGRsum3_lng, false, "Grouped tail sum on lng", args(1,4, batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1381             :  command("aggr", "subsum", AGGRsubsum_lng, false, "Grouped sum aggregate", args(1,5, batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1382             :  command("aggr", "subsum", AGGRsubsumcand_lng, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1383             :  command("aggr", "prod", AGGRprod3_lng, false, "Grouped tail product on lng", args(1,4, batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1384             :  command("aggr", "subprod", AGGRsubprod_lng, false, "Grouped product aggregate", args(1,5, batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1385             :  command("aggr", "subprod", AGGRsubprodcand_lng, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1386             :  command("aggr", "sum", AGGRsum3_flt, false, "Grouped tail sum on flt", args(1,4, batarg("",flt),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1387             :  command("aggr", "subsum", AGGRsubsum_flt, false, "Grouped sum aggregate", args(1,5, batarg("",flt),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1388             :  command("aggr", "subsum", AGGRsubsumcand_flt, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",flt),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1389             :  command("aggr", "prod", AGGRprod3_flt, false, "Grouped tail product on flt", args(1,4, batarg("",flt),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1390             :  command("aggr", "subprod", AGGRsubprod_flt, false, "Grouped product aggregate", args(1,5, batarg("",flt),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1391             :  command("aggr", "subprod", AGGRsubprodcand_flt, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",flt),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1392             :  command("aggr", "sum", AGGRsum3_dbl, false, "Grouped tail sum on flt", args(1,4, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1393             :  command("aggr", "subsum", AGGRsubsum_dbl, false, "Grouped sum aggregate", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1394             :  command("aggr", "subsum", AGGRsubsumcand_dbl, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1395             :  command("aggr", "prod", AGGRprod3_dbl, false, "Grouped tail product on flt", args(1,4, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1396             :  command("aggr", "subprod", AGGRsubprod_dbl, false, "Grouped product aggregate", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1397             :  command("aggr", "subprod", AGGRsubprodcand_dbl, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1398             :  command("aggr", "sum", AGGRsum3_dbl, false, "Grouped tail sum on dbl", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1399             :  command("aggr", "subsum", AGGRsubsum_dbl, false, "Grouped sum aggregate", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1400             :  command("aggr", "subsum", AGGRsubsumcand_dbl, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1401             :  command("aggr", "prod", AGGRprod3_dbl, false, "Grouped tail product on dbl", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1402             :  command("aggr", "subprod", AGGRsubprod_dbl, false, "Grouped product aggregate", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1403             :  command("aggr", "subprod", AGGRsubprodcand_dbl, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1404             :  command("aggr", "avg", AGGRavg13_dbl, false, "Grouped tail average on bte", args(1,4, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1405             :  command("aggr", "avg", AGGRavg23_dbl, false, "Grouped tail average on bte, also returns count", args(2,5, batarg("",dbl),batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1406             :  command("aggr", "avg", AGGRavg14_dbl, false, "Grouped tail average on bte", args(1,5, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1407             :  command("aggr", "avg", AGGRavg24_dbl, false, "Grouped tail average on bte, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1408             :  command("aggr", "subavg", AGGRsubavg1_dbl, false, "Grouped average aggregate", args(1,5, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1409             :  command("aggr", "subavg", AGGRsubavg1cand_dbl, false, "Grouped average aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1410             :  command("aggr", "subavg", AGGRsubavg2_dbl, false, "Grouped average aggregate, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1411             :  command("aggr", "subavg", AGGRsubavg2cand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1412             :  command("aggr", "subavg", AGGRsubavg1s_dbl, false, "Grouped average aggregate", args(1,6, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1413             :  command("aggr", "subavg", AGGRsubavg1scand_dbl, false, "Grouped average aggregate with candidates list", args(1,7, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1414             :  command("aggr", "subavg", AGGRsubavg2s_dbl, false, "Grouped average aggregate, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1415             :  command("aggr", "subavg", AGGRsubavg2scand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,8, batarg("",dbl),batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1416             :  command("aggr", "stdev", AGGRstdev3_dbl, false, "Grouped tail standard deviation (sample/non-biased) on bte", args(1,4, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1417             :  command("aggr", "substdev", AGGRsubstdev_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1418             :  command("aggr", "substdev", AGGRsubstdevcand_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1419             :  command("aggr", "stdevp", AGGRstdevp3_dbl, false, "Grouped tail standard deviation (population/biased) on bte", args(1,4, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1420             :  command("aggr", "substdevp", AGGRsubstdevp_dbl, false, "Grouped standard deviation (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1421             :  command("aggr", "substdevp", AGGRsubstdevpcand_dbl, false, "Grouped standard deviation (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1422             :  command("aggr", "variance", AGGRvariance3_dbl, false, "Grouped tail variance (sample/non-biased) on bte", args(1,4, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1423             :  command("aggr", "subvariance", AGGRsubvariance_dbl, false, "Grouped variance (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1424             :  command("aggr", "subvariance", AGGRsubvariancecand_dbl, false, "Grouped variance (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1425             :  command("aggr", "variancep", AGGRvariancep3_dbl, false, "Grouped tail variance (population/biased) on bte", args(1,4, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1426             :  command("aggr", "subvariancep", AGGRsubvariancep_dbl, false, "Grouped variance (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1427             :  command("aggr", "subvariancep", AGGRsubvariancepcand_dbl, false, "Grouped variance (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1428             :  command("aggr", "covariance", AGGRcovariance, false, "Covariance sample aggregate", args(1,5, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1))),
    1429             :  command("aggr", "subcovariance", AGGRsubcovariance, false, "Grouped covariance sample aggregate", args(1,6, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1430             :  command("aggr", "subcovariance", AGGRsubcovariancecand, false, "Grouped covariance sample aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1431             :  command("aggr", "covariancep", AGGRcovariancep, false, "Covariance population aggregate", args(1,5, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1))),
    1432             :  command("aggr", "subcovariancep", AGGRsubcovariancep, false, "Grouped covariance population aggregate", args(1,6, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1433             :  command("aggr", "subcovariancep", AGGRsubcovariancepcand, false, "Grouped covariance population aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1434             :  command("aggr", "corr", AGGRcorr, false, "Correlation aggregate", args(1,5, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1))),
    1435             :  command("aggr", "subcorr", AGGRsubcorr, false, "Grouped correlation aggregate", args(1,6, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1436             :  command("aggr", "subcorr", AGGRsubcorrcand, false, "Grouped correlation aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",bte),batarg("b2",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1437             :  command("aggr", "avg", AGGRavg13_dbl, false, "Grouped tail average on sht", args(1,4, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1438             :  command("aggr", "avg", AGGRavg23_dbl, false, "Grouped tail average on sht, also returns count", args(2,5, batarg("",dbl),batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1439             :  command("aggr", "avg", AGGRavg14_dbl, false, "Grouped tail average on sht", args(1,5, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1440             :  command("aggr", "avg", AGGRavg24_dbl, false, "Grouped tail average on sht, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1441             :  command("aggr", "subavg", AGGRsubavg1_dbl, false, "Grouped average aggregate", args(1,5, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1442             :  command("aggr", "subavg", AGGRsubavg1cand_dbl, false, "Grouped average aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1443             :  command("aggr", "subavg", AGGRsubavg2_dbl, false, "Grouped average aggregate, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1444             :  command("aggr", "subavg", AGGRsubavg2cand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1445             :  command("aggr", "subavg", AGGRsubavg1s_dbl, false, "Grouped average aggregate", args(1,6, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1446             :  command("aggr", "subavg", AGGRsubavg1scand_dbl, false, "Grouped average aggregate with candidates list", args(1,7, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1447             :  command("aggr", "subavg", AGGRsubavg2s_dbl, false, "Grouped average aggregate, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1448             :  command("aggr", "subavg", AGGRsubavg2scand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,8, batarg("",dbl),batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1449             :  command("aggr", "stdev", AGGRstdev3_dbl, false, "Grouped tail standard deviation (sample/non-biased) on sht", args(1,4, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1450             :  command("aggr", "substdev", AGGRsubstdev_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1451             :  command("aggr", "substdev", AGGRsubstdevcand_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1452             :  command("aggr", "stdevp", AGGRstdevp3_dbl, false, "Grouped tail standard deviation (population/biased) on sht", args(1,4, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1453             :  command("aggr", "substdevp", AGGRsubstdevp_dbl, false, "Grouped standard deviation (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1454             :  command("aggr", "substdevp", AGGRsubstdevpcand_dbl, false, "Grouped standard deviation (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1455             :  command("aggr", "variance", AGGRvariance3_dbl, false, "Grouped tail variance (sample/non-biased) on sht", args(1,4, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1456             :  command("aggr", "subvariance", AGGRsubvariance_dbl, false, "Grouped variance (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1457             :  command("aggr", "subvariance", AGGRsubvariancecand_dbl, false, "Grouped variance (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1458             :  command("aggr", "variancep", AGGRvariancep3_dbl, false, "Grouped tail variance (population/biased) on sht", args(1,4, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1459             :  command("aggr", "subvariancep", AGGRsubvariancep_dbl, false, "Grouped variance (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1460             :  command("aggr", "subvariancep", AGGRsubvariancepcand_dbl, false, "Grouped variance (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1461             :  command("aggr", "covariance", AGGRcovariance, false, "Covariance sample aggregate", args(1,5, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1))),
    1462             :  command("aggr", "subcovariance", AGGRsubcovariance, false, "Grouped covariance sample aggregate", args(1,6, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1463             :  command("aggr", "subcovariance", AGGRsubcovariancecand, false, "Grouped covariance sample aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1464             :  command("aggr", "covariancep", AGGRcovariancep, false, "Covariance population aggregate", args(1,5, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1))),
    1465             :  command("aggr", "subcovariancep", AGGRsubcovariancep, false, "Grouped covariance population aggregate", args(1,6, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1466             :  command("aggr", "subcovariancep", AGGRsubcovariancepcand, false, "Grouped covariance population aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1467             :  command("aggr", "corr", AGGRcorr, false, "Correlation aggregate", args(1,5, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1))),
    1468             :  command("aggr", "subcorr", AGGRsubcorr, false, "Grouped correlation aggregate", args(1,6, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1469             :  command("aggr", "subcorr", AGGRsubcorrcand, false, "Grouped correlation aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",sht),batarg("b2",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1470             :  command("aggr", "avg", AGGRavg13_dbl, false, "Grouped tail average on int", args(1,4, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1471             :  command("aggr", "avg", AGGRavg23_dbl, false, "Grouped tail average on int, also returns count", args(2,5, batarg("",dbl),batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1472             :  command("aggr", "avg", AGGRavg14_dbl, false, "Grouped tail average on int", args(1,5, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1473             :  command("aggr", "avg", AGGRavg24_dbl, false, "Grouped tail average on int, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1474             :  command("aggr", "subavg", AGGRsubavg1_dbl, false, "Grouped average aggregate", args(1,5, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1475             :  command("aggr", "subavg", AGGRsubavg1cand_dbl, false, "Grouped average aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1476             :  command("aggr", "subavg", AGGRsubavg2_dbl, false, "Grouped average aggregate, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1477             :  command("aggr", "subavg", AGGRsubavg2cand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1478             :  command("aggr", "subavg", AGGRsubavg1s_dbl, false, "Grouped average aggregate", args(1,6, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1479             :  command("aggr", "subavg", AGGRsubavg1scand_dbl, false, "Grouped average aggregate with candidates list", args(1,7, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1480             :  command("aggr", "subavg", AGGRsubavg2s_dbl, false, "Grouped average aggregate, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1481             :  command("aggr", "subavg", AGGRsubavg2scand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,8, batarg("",dbl),batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1482             :  command("aggr", "stdev", AGGRstdev3_dbl, false, "Grouped tail standard deviation (sample/non-biased) on int", args(1,4, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1483             :  command("aggr", "substdev", AGGRsubstdev_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1484             :  command("aggr", "substdev", AGGRsubstdevcand_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1485             :  command("aggr", "stdevp", AGGRstdevp3_dbl, false, "Grouped tail standard deviation (population/biased) on int", args(1,4, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1486             :  command("aggr", "substdevp", AGGRsubstdevp_dbl, false, "Grouped standard deviation (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1487             :  command("aggr", "substdevp", AGGRsubstdevpcand_dbl, false, "Grouped standard deviation (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1488             :  command("aggr", "variance", AGGRvariance3_dbl, false, "Grouped tail variance (sample/non-biased) on int", args(1,4, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1489             :  command("aggr", "subvariance", AGGRsubvariance_dbl, false, "Grouped variance (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1490             :  command("aggr", "subvariance", AGGRsubvariancecand_dbl, false, "Grouped variance (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1491             :  command("aggr", "variancep", AGGRvariancep3_dbl, false, "Grouped tail variance (population/biased) on int", args(1,4, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1492             :  command("aggr", "subvariancep", AGGRsubvariancep_dbl, false, "Grouped variance (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1493             :  command("aggr", "subvariancep", AGGRsubvariancepcand_dbl, false, "Grouped variance (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1494             :  command("aggr", "covariance", AGGRcovariance, false, "Covariance sample aggregate", args(1,5, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1))),
    1495             :  command("aggr", "subcovariance", AGGRsubcovariance, false, "Grouped covariance sample aggregate", args(1,6, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1496             :  command("aggr", "subcovariance", AGGRsubcovariancecand, false, "Grouped covariance sample aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1497             :  command("aggr", "covariancep", AGGRcovariancep, false, "Covariance population aggregate", args(1,5, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1))),
    1498             :  command("aggr", "subcovariancep", AGGRsubcovariancep, false, "Grouped covariance population aggregate", args(1,6, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1499             :  command("aggr", "subcovariancep", AGGRsubcovariancepcand, false, "Grouped covariance population aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1500             :  command("aggr", "corr", AGGRcorr, false, "Correlation aggregate", args(1,5, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1))),
    1501             :  command("aggr", "subcorr", AGGRsubcorr, false, "Grouped correlation aggregate", args(1,6, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1502             :  command("aggr", "subcorr", AGGRsubcorrcand, false, "Grouped correlation aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",int),batarg("b2",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1503             :  command("aggr", "avg", AGGRavg13_dbl, false, "Grouped tail average on lng", args(1,4, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1504             :  command("aggr", "avg", AGGRavg23_dbl, false, "Grouped tail average on lng, also returns count", args(2,5, batarg("",dbl),batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1505             :  command("aggr", "avg", AGGRavg14_dbl, false, "Grouped tail average on lng", args(1,5, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1506             :  command("aggr", "avg", AGGRavg24_dbl, false, "Grouped tail average on lng, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1507             :  command("aggr", "subavg", AGGRsubavg1_dbl, false, "Grouped average aggregate", args(1,5, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1508             :  command("aggr", "subavg", AGGRsubavg1cand_dbl, false, "Grouped average aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1509             :  command("aggr", "subavg", AGGRsubavg2_dbl, false, "Grouped average aggregate, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1510             :  command("aggr", "subavg", AGGRsubavg2cand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1511             :  command("aggr", "subavg", AGGRsubavg1s_dbl, false, "Grouped average aggregate", args(1,6, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1512             :  command("aggr", "subavg", AGGRsubavg1scand_dbl, false, "Grouped average aggregate with candidates list", args(1,7, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1513             :  command("aggr", "subavg", AGGRsubavg2s_dbl, false, "Grouped average aggregate, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1514             :  command("aggr", "subavg", AGGRsubavg2scand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,8, batarg("",dbl),batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1515             :  command("aggr", "stdev", AGGRstdev3_dbl, false, "Grouped tail standard deviation (sample/non-biased) on lng", args(1,4, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1516             :  command("aggr", "substdev", AGGRsubstdev_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1517             :  command("aggr", "substdev", AGGRsubstdevcand_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1518             :  command("aggr", "stdevp", AGGRstdevp3_dbl, false, "Grouped tail standard deviation (population/biased) on lng", args(1,4, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1519             :  command("aggr", "substdevp", AGGRsubstdevp_dbl, false, "Grouped standard deviation (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1520             :  command("aggr", "substdevp", AGGRsubstdevpcand_dbl, false, "Grouped standard deviation (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1521             :  command("aggr", "variance", AGGRvariance3_dbl, false, "Grouped tail variance (sample/non-biased) on lng", args(1,4, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1522             :  command("aggr", "subvariance", AGGRsubvariance_dbl, false, "Grouped variance (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1523             :  command("aggr", "subvariance", AGGRsubvariancecand_dbl, false, "Grouped variance (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1524             :  command("aggr", "variancep", AGGRvariancep3_dbl, false, "Grouped tail variance (population/biased) on lng", args(1,4, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1525             :  command("aggr", "subvariancep", AGGRsubvariancep_dbl, false, "Grouped variance (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1526             :  command("aggr", "subvariancep", AGGRsubvariancepcand_dbl, false, "Grouped variance (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1527             :  command("aggr", "covariance", AGGRcovariance, false, "Covariance sample aggregate", args(1,5, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1))),
    1528             :  command("aggr", "subcovariance", AGGRsubcovariance, false, "Grouped covariance sample aggregate", args(1,6, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1529             :  command("aggr", "subcovariance", AGGRsubcovariancecand, false, "Grouped covariance sample aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1530             :  command("aggr", "covariancep", AGGRcovariancep, false, "Covariance population aggregate", args(1,5, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1))),
    1531             :  command("aggr", "subcovariancep", AGGRsubcovariancep, false, "Grouped covariance population aggregate", args(1,6, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1532             :  command("aggr", "subcovariancep", AGGRsubcovariancepcand, false, "Grouped covariance population aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1533             :  command("aggr", "corr", AGGRcorr, false, "Correlation aggregate", args(1,5, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1))),
    1534             :  command("aggr", "subcorr", AGGRsubcorr, false, "Grouped correlation aggregate", args(1,6, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1535             :  command("aggr", "subcorr", AGGRsubcorrcand, false, "Grouped correlation aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",lng),batarg("b2",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1536             :  command("aggr", "avg", AGGRavg13_dbl, false, "Grouped tail average on flt", args(1,4, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1537             :  command("aggr", "avg", AGGRavg23_dbl, false, "Grouped tail average on flt, also returns count", args(2,5, batarg("",dbl),batarg("",lng),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1538             :  command("aggr", "avg", AGGRavg14_dbl, false, "Grouped tail average on flt", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1539             :  command("aggr", "avg", AGGRavg24_dbl, false, "Grouped tail average on flt, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1540             :  command("aggr", "subavg", AGGRsubavg1_dbl, false, "Grouped average aggregate", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1541             :  command("aggr", "subavg", AGGRsubavg1cand_dbl, false, "Grouped average aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1542             :  command("aggr", "subavg", AGGRsubavg2_dbl, false, "Grouped average aggregate, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1543             :  command("aggr", "subavg", AGGRsubavg2cand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1544             :  command("aggr", "subavg", AGGRsubavg1s_dbl, false, "Grouped average aggregate", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1545             :  command("aggr", "subavg", AGGRsubavg1scand_dbl, false, "Grouped average aggregate with candidates list", args(1,7, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1546             :  command("aggr", "subavg", AGGRsubavg2s_dbl, false, "Grouped average aggregate, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1547             :  command("aggr", "subavg", AGGRsubavg2scand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,8, batarg("",dbl),batarg("",lng),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1548             :  command("aggr", "stdev", AGGRstdev3_dbl, false, "Grouped tail standard deviation (sample/non-biased) on flt", args(1,4, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1549             :  command("aggr", "substdev", AGGRsubstdev_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1550             :  command("aggr", "substdev", AGGRsubstdevcand_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1551             :  command("aggr", "stdevp", AGGRstdevp3_dbl, false, "Grouped tail standard deviation (population/biased) on flt", args(1,4, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1552             :  command("aggr", "substdevp", AGGRsubstdevp_dbl, false, "Grouped standard deviation (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1553             :  command("aggr", "substdevp", AGGRsubstdevpcand_dbl, false, "Grouped standard deviation (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1554             :  command("aggr", "variance", AGGRvariance3_dbl, false, "Grouped tail variance (sample/non-biased) on flt", args(1,4, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1555             :  command("aggr", "subvariance", AGGRsubvariance_dbl, false, "Grouped variance (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1556             :  command("aggr", "subvariance", AGGRsubvariancecand_dbl, false, "Grouped variance (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1557             :  command("aggr", "variancep", AGGRvariancep3_dbl, false, "Grouped tail variance (population/biased) on flt", args(1,4, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1))),
    1558             :  command("aggr", "subvariancep", AGGRsubvariancep_dbl, false, "Grouped variance (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1559             :  command("aggr", "subvariancep", AGGRsubvariancepcand_dbl, false, "Grouped variance (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1560             :  command("aggr", "covariance", AGGRcovariance, false, "Covariance sample aggregate", args(1,5, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1))),
    1561             :  command("aggr", "subcovariance", AGGRsubcovariance, false, "Grouped covariance sample aggregate", args(1,6, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1562             :  command("aggr", "subcovariance", AGGRsubcovariancecand, false, "Grouped covariance sample aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1563             :  command("aggr", "covariancep", AGGRcovariancep, false, "Covariance population aggregate", args(1,5, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1))),
    1564             :  command("aggr", "subcovariancep", AGGRsubcovariancep, false, "Grouped covariance population aggregate", args(1,6, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1565             :  command("aggr", "subcovariancep", AGGRsubcovariancepcand, false, "Grouped covariance population aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1566             :  command("aggr", "corr", AGGRcorr, false, "Correlation aggregate", args(1,5, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1))),
    1567             :  command("aggr", "subcorr", AGGRsubcorr, false, "Grouped correlation aggregate", args(1,6, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1568             :  command("aggr", "subcorr", AGGRsubcorrcand, false, "Grouped correlation aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",flt),batarg("b2",flt),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1569             :  command("aggr", "avg", AGGRavg13_dbl, false, "Grouped tail average on dbl", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1570             :  command("aggr", "avg", AGGRavg23_dbl, false, "Grouped tail average on dbl, also returns count", args(2,5, batarg("",dbl),batarg("",lng),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1571             :  command("aggr", "avg", AGGRavg14_dbl, false, "Grouped tail average on dbl", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1572             :  command("aggr", "avg", AGGRavg24_dbl, false, "Grouped tail average on dbl, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("scale",int))),
    1573             :  command("aggr", "subavg", AGGRsubavg1_dbl, false, "Grouped average aggregate", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1574             :  command("aggr", "subavg", AGGRsubavg1cand_dbl, false, "Grouped average aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1575             :  command("aggr", "subavg", AGGRsubavg2_dbl, false, "Grouped average aggregate, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1576             :  command("aggr", "subavg", AGGRsubavg2cand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1577             :  command("aggr", "subavg", AGGRsubavg1s_dbl, false, "Grouped average aggregate", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1578             :  command("aggr", "subavg", AGGRsubavg1scand_dbl, false, "Grouped average aggregate with candidates list", args(1,7, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1579             :  command("aggr", "subavg", AGGRsubavg2s_dbl, false, "Grouped average aggregate, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit),arg("scale",int))),
    1580             :  command("aggr", "subavg", AGGRsubavg2scand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,8, batarg("",dbl),batarg("",lng),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit),arg("scale",int))),
    1581             :  command("aggr", "stdev", AGGRstdev3_dbl, false, "Grouped tail standard deviation (sample/non-biased) on dbl", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1582             :  command("aggr", "substdev", AGGRsubstdev_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1583             :  command("aggr", "substdev", AGGRsubstdevcand_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1584             :  command("aggr", "stdevp", AGGRstdevp3_dbl, false, "Grouped tail standard deviation (population/biased) on dbl", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1585             :  command("aggr", "substdevp", AGGRsubstdevp_dbl, false, "Grouped standard deviation (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1586             :  command("aggr", "substdevp", AGGRsubstdevpcand_dbl, false, "Grouped standard deviation (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1587             :  command("aggr", "variance", AGGRvariance3_dbl, false, "Grouped tail variance (sample/non-biased) on dbl", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1588             :  command("aggr", "subvariance", AGGRsubvariance_dbl, false, "Grouped variance (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1589             :  command("aggr", "subvariance", AGGRsubvariancecand_dbl, false, "Grouped variance (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1590             :  command("aggr", "variancep", AGGRvariancep3_dbl, false, "Grouped tail variance (population/biased) on dbl", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1))),
    1591             :  command("aggr", "subvariancep", AGGRsubvariancep_dbl, false, "Grouped variance (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1592             :  command("aggr", "subvariancep", AGGRsubvariancepcand_dbl, false, "Grouped variance (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1593             :  command("aggr", "covariance", AGGRcovariance, false, "Covariance sample aggregate", args(1,5, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1))),
    1594             :  command("aggr", "subcovariance", AGGRsubcovariance, false, "Grouped covariance sample aggregate", args(1,6, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1595             :  command("aggr", "subcovariance", AGGRsubcovariancecand, false, "Grouped covariance sample aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1596             :  command("aggr", "covariancep", AGGRcovariancep, false, "Covariance population aggregate", args(1,5, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1))),
    1597             :  command("aggr", "subcovariancep", AGGRsubcovariancep, false, "Grouped covariance population aggregate", args(1,6, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1598             :  command("aggr", "subcovariancep", AGGRsubcovariancepcand, false, "Grouped covariance population aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1599             :  command("aggr", "corr", AGGRcorr, false, "Correlation aggregate", args(1,5, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1))),
    1600             :  command("aggr", "subcorr", AGGRsubcorr, false, "Grouped correlation aggregate", args(1,6, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1601             :  command("aggr", "subcorr", AGGRsubcorrcand, false, "Grouped correlation aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",dbl),batarg("b2",dbl),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1602             :  command("aggr", "min", AGGRmin3, false, "", args(1,4, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2))),
    1603             :  command("aggr", "max", AGGRmax3, false, "", args(1,4, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2))),
    1604             :  command("aggr", "submin", AGGRsubmin, false, "Grouped minimum aggregate", args(1,5, batarg("",oid),batargany("b",1),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1605             :  command("aggr", "submin", AGGRsubmincand, false, "Grouped minimum aggregate with candidates list", args(1,6, batarg("",oid),batargany("b",1),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1606             :  command("aggr", "submax", AGGRsubmax, false, "Grouped maximum aggregate", args(1,5, batarg("",oid),batargany("b",1),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1607             :  command("aggr", "submax", AGGRsubmaxcand, false, "Grouped maximum aggregate with candidates list", args(1,6, batarg("",oid),batargany("b",1),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1608             :  command("aggr", "submin", AGGRsubmin_val, false, "Grouped minimum aggregate", args(1,5, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1609             :  command("aggr", "submin", AGGRsubmincand_val, false, "Grouped minimum aggregate with candidates list", args(1,6, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1610             :  command("aggr", "submax", AGGRsubmax_val, false, "Grouped maximum aggregate", args(1,5, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1611             :  command("aggr", "submax", AGGRsubmaxcand_val, false, "Grouped maximum aggregate with candidates list", args(1,6, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1612             :  command("aggr", "count", AGGRcount3, false, "", args(1,5, batarg("",lng),batargany("b",1),batarg("g",oid),batargany("e",2),arg("ignorenils",bit))),
    1613             :  command("aggr", "count", AGGRcount3nils, false, "Grouped count", args(1,4, batarg("",lng),batargany("b",1),batarg("g",oid),batargany("e",2))),
    1614             :  command("aggr", "count_no_nil", AGGRcount3nonils, false, "", args(1,4, batarg("",lng),batargany("b",1),batarg("g",oid),batargany("e",2))),
    1615             :  command("aggr", "subcount", AGGRsubcount, false, "Grouped count aggregate", args(1,5, batarg("",lng),batargany("b",1),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1616             :  command("aggr", "subcount", AGGRsubcountcand, false, "Grouped count aggregate with candidates list", args(1,6, batarg("",lng),batargany("b",1),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1617             :  command("aggr", "median", AGGRmedian, false, "Median aggregate", args(1,2, argany("",1),batargany("b",1))),
    1618             :  command("aggr", "submedian", AGGRsubmedian, false, "Grouped median aggregate", args(1,5, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1619             :  command("aggr", "submedian", AGGRsubmediancand, false, "Grouped median aggregate with candidate list", args(1,6, batargany("",1),batargany("b",1),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1620             :  command("aggr", "quantile", AGGRquantile, false, "Quantile aggregate", args(1,3, argany("",1),batargany("b",1),batarg("q",dbl))),
    1621             :  command("aggr", "quantile", AGGRquantile_cst, false, "Quantile aggregate", args(1,3, argany("",1),batargany("b",1),arg("q",dbl))),
    1622             :  command("aggr", "subquantile", AGGRsubquantile, false, "Grouped quantile aggregate", args(1,6, batargany("",1),batargany("b",1),batarg("q",dbl),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1623             :  command("aggr", "subquantile", AGGRsubquantilecand, false, "Grouped quantile aggregate with candidate list", args(1,7, batargany("",1),batargany("b",1),batarg("q",dbl),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1624             :  command("aggr", "median_avg", AGGRmedian_avg, false, "Median aggregate", args(1,2, arg("",dbl),batargany("b",1))),
    1625             :  command("aggr", "submedian_avg", AGGRsubmedian_avg, false, "Grouped median aggregate", args(1,5, batarg("",dbl),batargany("b",1),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1626             :  command("aggr", "submedian_avg", AGGRsubmediancand_avg, false, "Grouped median aggregate with candidate list", args(1,6, batarg("",dbl),batargany("b",1),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1627             :  command("aggr", "quantile_avg", AGGRquantile_avg, false, "Quantile aggregate", args(1,3, arg("",dbl),batargany("b",1),batarg("q",dbl))),
    1628             :  command("aggr", "quantile_avg", AGGRquantile_avg_cst, false, "Quantile aggregate", args(1,3, arg("",dbl),batargany("b",1),arg("q",dbl))),
    1629             :  command("aggr", "subquantile_avg", AGGRsubquantile_avg, false, "Grouped quantile aggregate", args(1,6, batarg("",dbl),batargany("b",1),batarg("q",dbl),batarg("g",oid),batargany("e",2),arg("skip_nils",bit))),
    1630             :  command("aggr", "subquantile_avg", AGGRsubquantilecand_avg, false, "Grouped quantile aggregate with candidate list", args(1,7, batarg("",dbl),batargany("b",1),batarg("q",dbl),batarg("g",oid),batargany("e",2),batarg("s",oid),arg("skip_nils",bit))),
    1631             :  command("aggr", "str_group_concat", AGGRstr_group_concat, false, "Grouped string tail concat", args(1,4, batarg("",str),batarg("b",str),batarg("g",oid),batargany("e",1))),
    1632             :  command("aggr", "substr_group_concat", AGGRsubstr_group_concat, false, "Grouped string concat", args(1,5, batarg("",str),batarg("b",str),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1633             :  command("aggr", "substr_group_concat", AGGRsubstr_group_concatcand, false, "Grouped string concat with candidates list", args(1,6, batarg("",str),batarg("b",str),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1634             :  command("aggr", "str_group_concat", AGGRstr_group_concat_sep, false, "Grouped string tail concat with custom separator", args(1,5, batarg("",str),batarg("b",str),batarg("sep",str),batarg("g",oid),batargany("e",1))),
    1635             :  command("aggr", "substr_group_concat", AGGRsubstr_group_concat_sep, false, "Grouped string concat with custom separator", args(1,6, batarg("",str),batarg("b",str),batarg("sep",str),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1636             :  command("aggr", "substr_group_concat", AGGRsubstr_group_concatcand_sep, false, "Grouped string concat with candidates list with custom separator", args(1,7, batarg("",str),batarg("b",str),batarg("sep",str),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1637             : 
    1638             :  command("aggr", "subavg", AGGRavg3, false, "Grouped average aggregation", args(3,8, batarg("",bte),batarg("",lng),batarg("",lng),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1639             :  command("aggr", "subavg", AGGRavg3, false, "Grouped average aggregation", args(3,8, batarg("",sht),batarg("",lng),batarg("",lng),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1640             :  command("aggr", "subavg", AGGRavg3, false, "Grouped average aggregation", args(3,8, batarg("",int),batarg("",lng),batarg("",lng),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1641             :  command("aggr", "subavg", AGGRavg3, false, "Grouped average aggregation", args(3,8, batarg("",lng),batarg("",lng),batarg("",lng),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1642             : #ifdef HAVE_HGE
    1643             :  command("aggr", "subavg", AGGRavg3, false, "Grouped average aggregation", args(3,8, batarg("",hge),batarg("",lng),batarg("",lng),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1644             : #endif
    1645             :  command("aggr", "subavg", AGGRavg3comb, false, "Grouped average aggregation combiner", args(1,7, batarg("",bte),batarg("b",bte),batarg("r",lng),batarg("c",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1646             :  command("aggr", "subavg", AGGRavg3comb, false, "Grouped average aggregation combiner", args(1,7, batarg("",sht),batarg("b",sht),batarg("r",lng),batarg("c",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1647             :  command("aggr", "subavg", AGGRavg3comb, false, "Grouped average aggregation combiner", args(1,7, batarg("",int),batarg("b",int),batarg("r",lng),batarg("c",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1648             :  command("aggr", "subavg", AGGRavg3comb, false, "Grouped average aggregation combiner", args(1,7, batarg("",lng),batarg("b",lng),batarg("r",lng),batarg("c",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1649             : #ifdef HAVE_HGE
    1650             :  command("aggr", "subavg", AGGRavg3comb, false, "Grouped average aggregation combiner", args(1,7, batarg("",hge),batarg("b",hge),batarg("r",lng),batarg("c",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1651             : #endif
    1652             : 
    1653             : #ifdef HAVE_HGE
    1654             :  command("aggr", "sum", AGGRsum3_hge, false, "Grouped tail sum on bte", args(1,4, batarg("",hge),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1655             :  command("aggr", "subsum", AGGRsubsum_hge, false, "Grouped sum aggregate", args(1,5, batarg("",hge),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1656             :  command("aggr", "subsum", AGGRsubsumcand_hge, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1657             :  command("aggr", "prod", AGGRprod3_hge, false, "Grouped tail product on bte", args(1,4, batarg("",hge),batarg("b",bte),batarg("g",oid),batargany("e",1))),
    1658             :  command("aggr", "subprod", AGGRsubprod_hge, false, "Grouped product aggregate", args(1,5, batarg("",hge),batarg("b",bte),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1659             :  command("aggr", "subprod", AGGRsubprodcand_hge, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",bte),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1660             :  command("aggr", "sum", AGGRsum3_hge, false, "Grouped tail sum on sht", args(1,4, batarg("",hge),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1661             :  command("aggr", "subsum", AGGRsubsum_hge, false, "Grouped sum aggregate", args(1,5, batarg("",hge),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1662             :  command("aggr", "subsum", AGGRsubsumcand_hge, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1663             :  command("aggr", "prod", AGGRprod3_hge, false, "Grouped tail product on sht", args(1,4, batarg("",hge),batarg("b",sht),batarg("g",oid),batargany("e",1))),
    1664             :  command("aggr", "subprod", AGGRsubprod_hge, false, "Grouped product aggregate", args(1,5, batarg("",hge),batarg("b",sht),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1665             :  command("aggr", "subprod", AGGRsubprodcand_hge, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",sht),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1666             :  command("aggr", "sum", AGGRsum3_hge, false, "Grouped tail sum on int", args(1,4, batarg("",hge),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1667             :  command("aggr", "subsum", AGGRsubsum_hge, false, "Grouped sum aggregate", args(1,5, batarg("",hge),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1668             :  command("aggr", "subsum", AGGRsubsumcand_hge, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1669             :  command("aggr", "prod", AGGRprod3_hge, false, "Grouped tail product on int", args(1,4, batarg("",hge),batarg("b",int),batarg("g",oid),batargany("e",1))),
    1670             :  command("aggr", "subprod", AGGRsubprod_hge, false, "Grouped product aggregate", args(1,5, batarg("",hge),batarg("b",int),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1671             :  command("aggr", "subprod", AGGRsubprodcand_hge, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",int),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1672             :  command("aggr", "sum", AGGRsum3_hge, false, "Grouped tail sum on lng", args(1,4, batarg("",hge),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1673             :  command("aggr", "subsum", AGGRsubsum_hge, false, "Grouped sum aggregate", args(1,5, batarg("",hge),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1674             :  command("aggr", "subsum", AGGRsubsumcand_hge, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1675             :  command("aggr", "prod", AGGRprod3_hge, false, "Grouped tail product on lng", args(1,4, batarg("",hge),batarg("b",lng),batarg("g",oid),batargany("e",1))),
    1676             :  command("aggr", "subprod", AGGRsubprod_hge, false, "Grouped product aggregate", args(1,5, batarg("",hge),batarg("b",lng),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1677             :  command("aggr", "subprod", AGGRsubprodcand_hge, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",lng),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1678             :  command("aggr", "sum", AGGRsum3_hge, false, "Grouped tail sum on hge", args(1,4, batarg("",hge),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1679             :  command("aggr", "subsum", AGGRsubsum_hge, false, "Grouped sum aggregate", args(1,5, batarg("",hge),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1680             :  command("aggr", "subsum", AGGRsubsumcand_hge, false, "Grouped sum aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1681             :  command("aggr", "prod", AGGRprod3_hge, false, "Grouped tail product on hge", args(1,4, batarg("",hge),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1682             :  command("aggr", "subprod", AGGRsubprod_hge, false, "Grouped product aggregate", args(1,5, batarg("",hge),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1683             :  command("aggr", "subprod", AGGRsubprodcand_hge, false, "Grouped product aggregate with candidates list", args(1,6, batarg("",hge),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1684             :  command("aggr", "avg", AGGRavg13_dbl, false, "Grouped tail average on hge", args(1,4, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1685             :  command("aggr", "avg", AGGRavg23_dbl, false, "Grouped tail average on hge, also returns count", args(2,5, batarg("",dbl),batarg("",lng),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1686             :  command("aggr", "subavg", AGGRsubavg1_dbl, false, "Grouped average aggregate", args(1,5, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1687             :  command("aggr", "subavg", AGGRsubavg1cand_dbl, false, "Grouped average aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1688             :  command("aggr", "subavg", AGGRsubavg2_dbl, false, "Grouped average aggregate, also returns count", args(2,6, batarg("",dbl),batarg("",lng),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1689             :  command("aggr", "subavg", AGGRsubavg2cand_dbl, false, "Grouped average aggregate with candidates list, also returns count", args(2,7, batarg("",dbl),batarg("",lng),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1690             :  command("aggr", "stdev", AGGRstdev3_dbl, false, "Grouped tail standard deviation (sample/non-biased) on hge", args(1,4, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1691             :  command("aggr", "substdev", AGGRsubstdev_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1692             :  command("aggr", "substdev", AGGRsubstdevcand_dbl, false, "Grouped standard deviation (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1693             :  command("aggr", "stdevp", AGGRstdevp3_dbl, false, "Grouped tail standard deviation (population/biased) on hge", args(1,4, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1694             :  command("aggr", "substdevp", AGGRsubstdevp_dbl, false, "Grouped standard deviation (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1695             :  command("aggr", "substdevp", AGGRsubstdevpcand_dbl, false, "Grouped standard deviation (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1696             :  command("aggr", "variance", AGGRvariance3_dbl, false, "Grouped tail variance (sample/non-biased) on hge", args(1,4, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1697             :  command("aggr", "subvariance", AGGRsubvariance_dbl, false, "Grouped variance (sample/non-biased) aggregate", args(1,5, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1698             :  command("aggr", "subvariance", AGGRsubvariancecand_dbl, false, "Grouped variance (sample/non-biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1699             :  command("aggr", "variancep", AGGRvariancep3_dbl, false, "Grouped tail variance (population/biased) on hge", args(1,4, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1))),
    1700             :  command("aggr", "subvariancep", AGGRsubvariancep_dbl, false, "Grouped variance (population/biased) aggregate", args(1,5, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1701             :  command("aggr", "subvariancep", AGGRsubvariancepcand_dbl, false, "Grouped variance (population/biased) aggregate with candidates list", args(1,6, batarg("",dbl),batarg("b",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1702             :  command("aggr", "covariance", AGGRcovariance, false, "Covariance sample aggregate", args(1,5, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1))),
    1703             :  command("aggr", "subcovariance", AGGRsubcovariance, false, "Grouped covariance sample aggregate", args(1,6, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1704             :  command("aggr", "subcovariance", AGGRsubcovariancecand, false, "Grouped covariance sample aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1705             :  command("aggr", "covariancep", AGGRcovariancep, false, "Covariance population aggregate", args(1,5, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1))),
    1706             :  command("aggr", "subcovariancep", AGGRsubcovariancep, false, "Grouped covariance population aggregate", args(1,6, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1707             :  command("aggr", "subcovariancep", AGGRsubcovariancepcand, false, "Grouped covariance population aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1708             :  command("aggr", "corr", AGGRcorr, false, "Correlation aggregate", args(1,5, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1))),
    1709             :  command("aggr", "subcorr", AGGRsubcorr, false, "Grouped correlation aggregate", args(1,6, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1),arg("skip_nils",bit))),
    1710             :  command("aggr", "subcorr", AGGRsubcorrcand, false, "Grouped correlation aggregate with candidate list", args(1,7, batarg("",dbl),batarg("b1",hge),batarg("b2",hge),batarg("g",oid),batargany("e",1),batarg("s",oid),arg("skip_nils",bit))),
    1711             : #endif
    1712             :  { .imp=NULL }
    1713             : };
    1714             : #include "mal_import.h"
    1715             : #ifdef _MSC_VER
    1716             : #undef read
    1717             : #pragma section(".CRT$XCU",read)
    1718             : #endif
    1719         321 : LIB_STARTUP_FUNC(init_aggr_mal)
    1720         321 : { mal_module("aggr", NULL, aggr_init_funcs); }

Generated by: LCOV version 1.14