Changeset: 7f2765253f35 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7f2765253f35
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        gdk/gdk_aggr.c
        gdk/gdk_calc.h
        monetdb5/modules/kernel/algebra.c
Branch: pushcands
Log Message:

aggr.{stdev,variance}{,p} now have optional candidate lists.


diffs (truncated from 365 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -242,6 +242,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ", "AGGRstdev3_dbl;",      ""      ]
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ", "AGGRstdev3_dbl;",      ""      ]
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ", "AGGRstdev3_dbl;",      ""      ]
+[ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",      "ALGstdev2;",   ""      ]
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:any_2]):dbl ",     
"ALGstdev;",    ""      ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:bte], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:dbl], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
@@ -249,6 +250,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
+[ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",     "ALGstdevp2;",  ""      ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:any_2]):dbl ",    
"ALGstdevp;",   ""      ]
 [ "aggr",      "str_group_concat",     "command 
aggr.str_group_concat(X_0:bat[:str], X_1:bat[:oid], X_2:bat[:any_1]):bat[:str] 
",      "AGGRstr_group_concat;",        ""      ]
 [ "aggr",      "str_group_concat",     "command 
aggr.str_group_concat(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:str] ",       "AGGRstr_group_concat_sep;",    ""      ]
@@ -606,6 +608,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",      "AGGRvariance3_dbl;",   ""    
  ]
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",      "AGGRvariance3_dbl;",   ""    
  ]
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",      "AGGRvariance3_dbl;",   ""    
  ]
+[ "aggr",      "variance",     "command aggr.variance(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",   "ALGvariance2;",        ""      ]
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:any_2]):dbl ",  
"ALGvariance;", ""      ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:bte], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:dbl], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
@@ -613,6 +616,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
+[ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",  "ALGvariancep2;",       ""      ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:any_2]):dbl ", 
"ALGvariancep;",        ""      ]
 [ "aggr",      "zero_or_one",  "command 
aggr.zero_or_one(X_0:bat[:any_1]):any_1 ",     "zero_or_one;", ""      ]
 [ "aggr",      "zero_or_one",  "command aggr.zero_or_one(X_0:bat[:any_1], 
X_1:bit):any_1 ",    "zero_or_one_error;",   ""      ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -283,6 +283,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ", "AGGRstdev3_dbl;",      ""      ]
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ", "AGGRstdev3_dbl;",      ""      ]
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ", "AGGRstdev3_dbl;",      ""      ]
+[ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",      "ALGstdev2;",   ""      ]
 [ "aggr",      "stdev",        "command aggr.stdev(X_0:bat[:any_2]):dbl ",     
"ALGstdev;",    ""      ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:bte], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:dbl], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
@@ -291,6 +292,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",        "AGGRstdevp3_dbl;",     ""  
    ]
+[ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",     "ALGstdevp2;",  ""      ]
 [ "aggr",      "stdevp",       "command aggr.stdevp(X_0:bat[:any_2]):dbl ",    
"ALGstdevp;",   ""      ]
 [ "aggr",      "str_group_concat",     "command 
aggr.str_group_concat(X_0:bat[:str], X_1:bat[:oid], X_2:bat[:any_1]):bat[:str] 
",      "AGGRstr_group_concat;",        ""      ]
 [ "aggr",      "str_group_concat",     "command 
aggr.str_group_concat(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:str] ",       "AGGRstr_group_concat_sep;",    ""      ]
@@ -722,6 +724,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",      "AGGRvariance3_dbl;",   ""    
  ]
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",      "AGGRvariance3_dbl;",   ""    
  ]
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",      "AGGRvariance3_dbl;",   ""    
  ]
+[ "aggr",      "variance",     "command aggr.variance(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",   "ALGvariance2;",        ""      ]
 [ "aggr",      "variance",     "command aggr.variance(X_0:bat[:any_2]):dbl ",  
"ALGvariance;", ""      ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:bte], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:dbl], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
@@ -730,6 +733,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:int], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:lng], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:sht], 
X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] ",     "AGGRvariancep3_dbl;",  ""     
 ]
+[ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:any_2], 
X_1:bat[:oid]):dbl ",  "ALGvariancep2;",       ""      ]
 [ "aggr",      "variancep",    "command aggr.variancep(X_0:bat[:any_2]):dbl ", 
"ALGvariancep;",        ""      ]
 [ "aggr",      "zero_or_one",  "command 
aggr.zero_or_one(X_0:bat[:any_1]):any_1 ",     "zero_or_one;", ""      ]
 [ "aggr",      "zero_or_one",  "command aggr.zero_or_one(X_0:bat[:any_1], 
X_1:bit):any_1 ",    "zero_or_one_error;",   ""      ]
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -99,12 +99,12 @@ BAT *BATcalcorcst(BAT *b, const ValRecor
 BAT *BATcalcrsh(BAT *b1, BAT *b2, BAT *s1, BAT *s2, bool abort_on_error);
 BAT *BATcalcrshcst(BAT *b, const ValRecord *v, BAT *s, bool abort_on_error);
 BAT *BATcalcsign(BAT *b, BAT *s);
-dbl BATcalcstdev_population(dbl *avgp, BAT *b);
-dbl BATcalcstdev_sample(dbl *avgp, BAT *b);
+dbl BATcalcstdev_population(dbl *avgp, BAT *b, BAT *s);
+dbl BATcalcstdev_sample(dbl *avgp, BAT *b, BAT *s);
 BAT *BATcalcsub(BAT *b1, BAT *b2, BAT *s1, BAT *s2, int tp, bool 
abort_on_error);
 BAT *BATcalcsubcst(BAT *b, const ValRecord *v, BAT *s, int tp, bool 
abort_on_error);
-dbl BATcalcvariance_population(dbl *avgp, BAT *b);
-dbl BATcalcvariance_sample(dbl *avgp, BAT *b);
+dbl BATcalcvariance_population(dbl *avgp, BAT *b, BAT *s);
+dbl BATcalcvariance_sample(dbl *avgp, BAT *b, BAT *s);
 BAT *BATcalcxor(BAT *b1, BAT *b2, BAT *s1, BAT *s2);
 BAT *BATcalcxorcst(BAT *b, const ValRecord *v, BAT *s);
 bool BATcheckorderidx(BAT *b);
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -4098,24 +4098,25 @@ BATgroupquantile_avg(BAT *b, BAT *g, BAT
 /* ---------------------------------------------------------------------- */
 /* standard deviation (both biased and non-biased) */
 
-#define AGGR_STDEV_SINGLE(TYPE)                                \
-       do {                                            \
-               TYPE x;                                 \
-               for (i = 0; i < cnt; i++) {             \
-                       x = ((const TYPE *) values)[i]; \
-                       if (is_##TYPE##_nil(x))         \
-                               continue;               \
-                       n++;                            \
-                       delta = (dbl) x - mean;         \
-                       mean += delta / n;              \
-                       m2 += delta * ((dbl) x - mean); \
-                       if (isinf(m2))                  \
-                               goto overflow;          \
-               }                                       \
+#define AGGR_STDEV_SINGLE(TYPE)                                        \
+       do {                                                    \
+               TYPE x;                                         \
+               for (i = 0; i < ci->ncand; i++) {               \
+                       oid o = canditer_next(ci) - ci->hseq;   \
+                       x = ((const TYPE *) values)[o];         \
+                       if (is_##TYPE##_nil(x))                 \
+                               continue;                       \
+                       n++;                                    \
+                       delta = (dbl) x - mean;                 \
+                       mean += delta / n;                      \
+                       m2 += delta * ((dbl) x - mean);         \
+                       if (isinf(m2))                          \
+                               goto overflow;                  \
+               }                                               \
        } while (0)
 
 static dbl
-calcvariance(dbl *restrict avgp, const void *restrict values, BUN cnt, int tp, 
bool issample)
+calcvariance(dbl *restrict avgp, const void *restrict values, struct canditer 
*ci, int tp, bool issample)
 {
        BUN n = 0, i;
        dbl mean = 0;
@@ -4164,52 +4165,60 @@ calcvariance(dbl *restrict avgp, const v
 }
 
 dbl
-BATcalcstdev_population(dbl *avgp, BAT *b)
+BATcalcstdev_population(dbl *avgp, BAT *b, BAT *s)
 {
        lng t0 = 0;
+       struct canditer ci;
 
        TRC_DEBUG_IF(ALGO) t0 = GDKusec();
+       canditer_init(&ci, b, s);
        dbl v = calcvariance(avgp, (const void *) Tloc(b, 0),
-                            BATcount(b), b->ttype, false);
+                            &ci, b->ttype, false);
        TRC_DEBUG(ALGO, "b=" ALGOBATFMT " (" LLFMT " usec)\n",
                  ALGOBATPAR(b), GDKusec() - t0);
        return is_dbl_nil(v) ? dbl_nil : sqrt(v);
 }
 
 dbl
-BATcalcstdev_sample(dbl *avgp, BAT *b)
+BATcalcstdev_sample(dbl *avgp, BAT *b, BAT *s)
 {
        lng t0 = 0;
+       struct canditer ci;
 
        TRC_DEBUG_IF(ALGO) t0 = GDKusec();
+       canditer_init(&ci, b, s);
        dbl v = calcvariance(avgp, (const void *) Tloc(b, 0),
-                            BATcount(b), b->ttype, true);
+                            &ci, b->ttype, true);
        TRC_DEBUG(ALGO, "b=" ALGOBATFMT " (" LLFMT " usec)\n",
                  ALGOBATPAR(b), GDKusec() - t0);
        return is_dbl_nil(v) ? dbl_nil : sqrt(v);
 }
 
 dbl
-BATcalcvariance_population(dbl *avgp, BAT *b)
+BATcalcvariance_population(dbl *avgp, BAT *b, BAT *s)
 {
        lng t0 = 0;
+       struct canditer ci;
 
        TRC_DEBUG_IF(ALGO) t0 = GDKusec();
+       canditer_init(&ci, b, s);
        dbl v = calcvariance(avgp, (const void *) Tloc(b, 0),
-                            BATcount(b), b->ttype, false);
+                            &ci, b->ttype, false);
        TRC_DEBUG(ALGO, "b=" ALGOBATFMT " (" LLFMT " usec)\n",
                  ALGOBATPAR(b), GDKusec() - t0);
        return v;
 }
 
 dbl
-BATcalcvariance_sample(dbl *avgp, BAT *b)
+BATcalcvariance_sample(dbl *avgp, BAT *b, BAT *s)
 {
        lng t0 = 0;
+       struct canditer ci;
 
        TRC_DEBUG_IF(ALGO) t0 = GDKusec();
+       canditer_init(&ci, b, s);
        dbl v = calcvariance(avgp, (const void *) Tloc(b, 0),
-                            BATcount(b), b->ttype, true);
+                            &ci, b->ttype, true);
        TRC_DEBUG(ALGO, "b=" ALGOBATFMT " (" LLFMT " usec)\n",
                  ALGOBATPAR(b), GDKusec() - t0);
        return v;
diff --git a/gdk/gdk_calc.h b/gdk/gdk_calc.h
--- a/gdk/gdk_calc.h
+++ b/gdk/gdk_calc.h
@@ -148,12 +148,12 @@ gdk_export void *BATmin(BAT *b, void *ag
 gdk_export void *BATmax_skipnil(BAT *b, void *aggr, bit skipnil);
 gdk_export void *BATmin_skipnil(BAT *b, void *aggr, bit skipnil);
 
-gdk_export dbl BATcalcstdev_population(dbl *avgp, BAT *b);
-gdk_export dbl BATcalcstdev_sample(dbl *avgp, BAT *b);
+gdk_export dbl BATcalcstdev_population(dbl *avgp, BAT *b, BAT *s);
+gdk_export dbl BATcalcstdev_sample(dbl *avgp, BAT *b, BAT *s);
 gdk_export BAT *BATgroupstdev_sample(BAT *b, BAT *g, BAT *e, BAT *s, int tp, 
bool skip_nils, bool abort_on_error);
 gdk_export BAT *BATgroupstdev_population(BAT *b, BAT *g, BAT *e, BAT *s, int 
tp, bool skip_nils, bool abort_on_error);
-gdk_export dbl BATcalcvariance_population(dbl *avgp, BAT *b);
-gdk_export dbl BATcalcvariance_sample(dbl *avgp, BAT *b);
+gdk_export dbl BATcalcvariance_population(dbl *avgp, BAT *b, BAT *s);
+gdk_export dbl BATcalcvariance_sample(dbl *avgp, BAT *b, BAT *s);
 gdk_export BAT *BATgroupvariance_sample(BAT *b, BAT *g, BAT *e, BAT *s, int 
tp, bool skip_nils, bool abort_on_error);
 gdk_export BAT *BATgroupvariance_population(BAT *b, BAT *g, BAT *e, BAT *s, 
int tp, bool skip_nils, bool abort_on_error);
 gdk_export dbl BATcalccovariance_sample(BAT *b1, BAT *b2, BAT *s1, BAT *s2);
diff --git a/monetdb5/modules/kernel/algebra.c 
b/monetdb5/modules/kernel/algebra.c
--- a/monetdb5/modules/kernel/algebra.c
+++ b/monetdb5/modules/kernel/algebra.c
@@ -1295,73 +1295,79 @@ ALGreuse(bat *ret, const bat *bid)
 }
 
 /*
- * BAT standard deviation
+ * BAT standard deviation and variance
  */
 static str
+ALGstdvar(dbl *res, const bat *bid, const bat *sid,
+                 dbl (*func)(dbl *, BAT *, BAT *), const char *malfunc)
+{
+       BAT *b, *s = NULL;
+       dbl result;
+
+       if ((b = BATdescriptor(*bid)) == NULL ||
+               (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == 
NULL)) {
+               if (b)
+                       BBPunfix(b->batCacheid);
+               throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+       }
+       result = (*func)(NULL, b, s);
+       BBPunfix(b->batCacheid);
+       if (s)
+               BBPunfix(s->batCacheid);
+       if (is_dbl_nil(result) && GDKerrbuf && GDKerrbuf[0])
+               throw(MAL, malfunc, GDK_EXCEPTION);
+       *res = result;
+       return MAL_SUCCEED;
+}
+
+static str
 ALGstdev(dbl *res, const bat *bid)
 {
-       BAT *b;
-       dbl stdev;
+       return ALGstdvar(res, bid, NULL, BATcalcstdev_sample, "aggr.stdev");
+}
 
-       if ((b = BATdescriptor(*bid)) == NULL)
-               throw(MAL, "aggr.stdev", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-       stdev = BATcalcstdev_sample(NULL, b);
-       BBPunfix(b->batCacheid);
-       if (is_dbl_nil(stdev) && GDKerrbuf && GDKerrbuf[0])
-               throw(MAL, "aggr.stdev", GDK_EXCEPTION);
-       *res = stdev;
-       return MAL_SUCCEED;
+static str
+ALGstdev2(dbl *res, const bat *bid, const bat *sid)
+{
+       return ALGstdvar(res, bid, sid, BATcalcstdev_sample, "aggr.stdev");
 }
 
 static str
 ALGstdevp(dbl *res, const bat *bid)
 {
-       BAT *b;
-       dbl stdev;
-
-       if ((b = BATdescriptor(*bid)) == NULL)
-               throw(MAL, "aggr.stdevp", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-       stdev = BATcalcstdev_population(NULL, b);
-       BBPunfix(b->batCacheid);
-       if (is_dbl_nil(stdev) && GDKerrbuf && GDKerrbuf[0])
-               throw(MAL, "aggr.stdevp", GDK_EXCEPTION);
-       *res = stdev;
-       return MAL_SUCCEED;
+       return ALGstdvar(res, bid, NULL, BATcalcstdev_population, 
"aggr.stdevp");
 }
 
-/*
- * BAT variance
- */
+static str
+ALGstdevp2(dbl *res, const bat *bid, const bat *sid)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to