Changeset: 8d16b6a626e4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8d16b6a626e4
Modified Files:
        gdk/gdk_analytic.h
        gdk/gdk_analytic_func.c
        sql/backends/monet5/sql_rank.c
        sql/backends/monet5/sql_rank.h
        sql/backends/monet5/sql_rank.mal
        sql/backends/monet5/sql_rank.mal.sh
        sql/backends/monet5/sql_rank_hge.mal
        sql/backends/monet5/sql_rank_hge.mal.sh
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/39_analytics.sql
        sql/test/analytics/Tests/analytics14.sql
        sql/test/analytics/Tests/analytics14.stable.out
Branch: statistics-analytics
Log Message:

Removed median, median_avg, quantile and quantile_avg window functions. They 
require input order to be computed which may not be achieved on window 
functions, which make them pointless to exist


diffs (truncated from 2371 to 300 lines):

diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h
--- a/gdk/gdk_analytic.h
+++ b/gdk/gdk_analytic.h
@@ -45,7 +45,4 @@ gdk_export gdk_return GDKanalytical_vari
 gdk_export gdk_return GDKanalytical_covariance_pop(BAT *r, BAT *b1, BAT *b2, 
BAT *s, BAT *e, int tpe);
 gdk_export gdk_return GDKanalytical_covariance_samp(BAT *r, BAT *b1, BAT *b2, 
BAT *s, BAT *e, int tpe);
 
-gdk_export gdk_return GDKanalytical_quantile(BAT *r, BAT *b, BAT *s, BAT *e, 
BAT *q, const void *restrict quantile, int tp1, int tp2);
-gdk_export gdk_return GDKanalytical_quantile_avg(BAT *r, BAT *b, BAT *s, BAT 
*e, BAT *q, const void *restrict quantile, int tp1, int tp2);
-
 #endif //_GDK_ANALYTIC_H_
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -1882,311 +1882,3 @@ GDKanalytical_##NAME(BAT *r, BAT *b1, BA
 
 GDK_ANALYTICAL_COVARIANCE(covariance_samp, 1, m2 / (n - 1))
 GDK_ANALYTICAL_COVARIANCE(covariance_pop, 0, m2 / n)
-
-/* There will be always at least one value for the quantile, because we don't 
implement the exclude clause yet */
-
-#define ANALYTICAL_QUANTILE_IMP_FIXED(TPE1, TPE2, NEXT_QUA)                    
\
-       do {                                                            \
-               TPE1 *restrict bp = (TPE1*)Tloc(b, 0), *restrict rb = 
(TPE1*)Tloc(r, 0), v;             \
-               for (; i < cnt; i++, rb++) {                            \
-                       TPE2 nqua = NEXT_QUA;                           \
-                       if (is_##TPE2##_nil(nqua)) { \
-                               *rb = TPE1##_nil; \
-                               has_nils = true; \
-                       } else { \
-                               ss = (BUN) start[i]; \
-                               ee = (BUN) end[i]; \
-                               f = (ee - ss - 1) * nqua; \
-                               qindex = ss + ee - (BUN) (ee + 0.5f - f); \
-                               assert(qindex >= ss && qindex < ee); \
-                               v = bp[qindex]; \
-                               *rb = v; \
-                               has_nils |= (is_##TPE1##_nil(v)); \
-                       } \
-               }       \
-       } while (0)
-
-#define ANALYTICAL_QUANTILE_IMP_VARSIZED(TPE2, NEXT_QUA)       \
-       do {                                                            \
-               BATiter bpi = bat_iterator(b); \
-               for (; i < cnt; i++) {                                  \
-                       TPE2 nqua = NEXT_QUA;                           \
-                       if (is_##TPE2##_nil(nqua)) { \
-                               curval = (void *) nil;  \
-                               has_nils = true; \
-                       } else { \
-                               ss = (BUN) start[i]; \
-                               ee = (BUN) end[i]; \
-                               f = (ee - ss - 1) * nqua; \
-                               qindex = ss + ee - (BUN) (ee + 0.5f - f); \
-                               assert(qindex >= ss && qindex < ee); \
-                               curval = BUNtail(bpi, qindex); \
-                               has_nils |= atomcmp(curval, nil) == 0;  \
-                       } \
-                       if (BUNappend(r, curval, false) != GDK_SUCCEED) \
-                               goto allocation_error;  \
-               }       \
-       } while (0)
-
-#define ANALYTICAL_QUANTILE_CALC_MULTI(TPE1)                           \
-       do {                                                            \
-               switch (tp2) {                                          \
-               case TYPE_flt: {                                                
\
-                       flt *restrict qp = (flt*)Tloc(q, 0); \
-                       ANALYTICAL_QUANTILE_IMP_FIXED(TPE1, flt, qp[i]); \
-               } break;                        \
-               case TYPE_dbl: {                \
-                       dbl *restrict qp = (dbl*)Tloc(q, 0);    \
-                       ANALYTICAL_QUANTILE_IMP_FIXED(TPE1, dbl, qp[i]); \
-               } break;                \
-               default:                \
-                       goto quantile_nosupport;                \
-               }                       \
-       } while (0)
-
-gdk_return
-GDKanalytical_quantile(BAT *r, BAT *b, BAT *s, BAT *e, BAT *q, const void 
*restrict quantile, int tp1, int tp2)
-{
-       BUN i = 0, cnt = BATcount(b), qindex, ss, ee;
-       lng *restrict start, *restrict end;
-       dbl qua = 0, f;
-       bool has_nils = false;
-       const void *restrict nil = ATOMnilptr(tp1);
-       int (*atomcmp) (const void *, const void *) = ATOMcompare(tp1);
-       void *curval;
-
-       assert(s && e && ((q && !quantile) || (!q && quantile)));
-       start = (lng *) Tloc(s, 0);
-       end = (lng *) Tloc(e, 0);
-
-       if (quantile) {
-               switch (tp2) {
-               case TYPE_flt:{
-                       flt val = *(flt *) quantile;
-                       qua = !is_flt_nil(val) ? (dbl) val : dbl_nil;
-               } break;
-               case TYPE_dbl:{
-                       qua = *(dbl *) quantile;
-               } break;
-               default:
-                       goto quantile_nosupport;
-               }
-               switch (tp1) {
-               case TYPE_bit:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(bit, dbl, qua);
-                       break;
-               case TYPE_bte:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(bte, dbl, qua);
-                       break;
-               case TYPE_sht:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(sht, dbl, qua);
-                       break;
-               case TYPE_int:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(int, dbl, qua);
-                       break;
-               case TYPE_lng:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(lng, dbl, qua);
-                       break;
-#ifdef HAVE_HGE
-               case TYPE_hge:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(hge, dbl, qua);
-                       break;
-#endif
-               case TYPE_flt:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(flt, dbl, qua);
-                       break;
-               case TYPE_dbl:
-                       ANALYTICAL_QUANTILE_IMP_FIXED(dbl, dbl, qua);
-                       break;
-               default:
-                       ANALYTICAL_QUANTILE_IMP_VARSIZED(dbl, qua);
-               }
-       } else {
-               switch (tp1) {
-               case TYPE_bit:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(bit);
-                       break;
-               case TYPE_bte:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(bte);
-                       break;
-               case TYPE_sht:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(sht);
-                       break;
-               case TYPE_int:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(int);
-                       break;
-               case TYPE_lng:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(lng);
-                       break;
-#ifdef HAVE_HGE
-               case TYPE_hge:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(hge);
-                       break;
-#endif
-               case TYPE_flt:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(flt);
-                       break;
-               case TYPE_dbl:
-                       ANALYTICAL_QUANTILE_CALC_MULTI(dbl);
-                       break;
-               default: {
-                       switch (tp2) {
-                       case TYPE_flt: {
-                               flt *restrict qp = (flt*)Tloc(q, 0);
-                               ANALYTICAL_QUANTILE_IMP_VARSIZED(flt, qp[i]);
-                       } break;
-                       case TYPE_dbl: {
-                               dbl *restrict qp = (dbl*)Tloc(q, 0);
-                               ANALYTICAL_QUANTILE_IMP_VARSIZED(dbl, qp[i]);
-                       } break;
-                       default:
-                               goto quantile_nosupport;
-                       }
-               }
-               }
-       }
-       BATsetcount(r, cnt);
-       r->tnonil = !has_nils;
-       r->tnil = has_nils;
-       return GDK_SUCCEED;
-allocation_error:
-       GDKerror("%s: malloc failure\n", __func__);
-       return GDK_FAIL;
-quantile_nosupport:
-       GDKerror("%s: type %s not supported for the quantile.\n", __func__, 
ATOMname(tp2));
-       return GDK_FAIL;
-}
-
-#define ANALYTICAL_QUANTILE_AVG_IMP(TPE1, TPE2, NEXT_QUA)              \
-       do {                                                            \
-               TPE1 *restrict bp = (TPE1*)Tloc(b, 0), ns, ne; \
-               for (; i < cnt; i++, rb++) {                            \
-                       TPE2 nqua = NEXT_QUA;                           \
-                       if (is_##TPE2##_nil(nqua)) { \
-                               *rb = dbl_nil; \
-                               has_nils = true; \
-                       } else { \
-                               ss = (BUN) start[i]; \
-                               ee = (BUN) end[i]; \
-                               f = (ee - ss - 1) * nqua; \
-                               lo = floor(f); \
-                               hi = ceil(f); \
-                               ns = bp[ss + (BUN) hi]; \
-                               ne = bp[ss + (BUN) lo]; \
-                               if (is_##TPE1##_nil(ns) || is_##TPE1##_nil(ne)) 
{ \
-                                       v = dbl_nil; \
-                                       has_nils = true; \
-                               } else \
-                                       v = (f - lo) * ns + (lo + 1 - f) * ne; \
-                               *rb = v; \
-                       } \
-               }       \
-       } while (0)
-
-#define ANALYTICAL_QUANTILE_AVG_CALC_MULTI(TPE1)       \
-       do {                                                            \
-               switch (tp2) {                                          \
-               case TYPE_flt: {                                                
\
-                       flt *restrict qp = (flt*)Tloc(q, 0); \
-                       ANALYTICAL_QUANTILE_AVG_IMP(TPE1, flt, qp[i]); \
-               } break;                                                \
-               case TYPE_dbl: {                                                
\
-                       dbl *restrict qp = (dbl*)Tloc(q, 0);    \
-                       ANALYTICAL_QUANTILE_AVG_IMP(TPE1, dbl, qp[i]); \
-               } break;                                                \
-               default:                                                \
-                       goto quantile_nosupport;                                
        \
-               }                                                       \
-       } while (0)
-
-gdk_return
-GDKanalytical_quantile_avg(BAT *r, BAT *b, BAT *s, BAT *e, BAT *q, const void 
*restrict quantile, int tp1, int tp2)
-{
-       BUN i = 0, cnt = BATcount(b), ss, ee;
-       lng *restrict start, *restrict end;
-       dbl qua = 0, f, *restrict rb = (dbl*) Tloc(r, 0), v, lo, hi;
-       bool has_nils = false;
-
-       assert(s && e && ((q && !quantile) || (!q && quantile)));
-       start = (lng *) Tloc(s, 0);
-       end = (lng *) Tloc(e, 0);
-
-       if (quantile) {
-               switch (tp2) {
-               case TYPE_flt:{
-                       flt val = *(flt *) quantile;
-                       qua = !is_flt_nil(val) ? (dbl) val : dbl_nil;
-               } break;
-               case TYPE_dbl:{
-                       qua = *(dbl *) quantile;
-               } break;
-               default:
-                       goto quantile_nosupport;
-               }
-               switch (tp1) {
-               case TYPE_bte:
-                       ANALYTICAL_QUANTILE_AVG_IMP(bte, dbl, qua);
-                       break;
-               case TYPE_sht:
-                       ANALYTICAL_QUANTILE_AVG_IMP(sht, dbl, qua);
-                       break;
-               case TYPE_int:
-                       ANALYTICAL_QUANTILE_AVG_IMP(int, dbl, qua);
-                       break;
-               case TYPE_lng:
-                       ANALYTICAL_QUANTILE_AVG_IMP(lng, dbl, qua);
-                       break;
-#ifdef HAVE_HGE
-               case TYPE_hge:
-                       ANALYTICAL_QUANTILE_AVG_IMP(hge, dbl, qua);
-                       break;
-#endif
-               case TYPE_flt:
-                       ANALYTICAL_QUANTILE_AVG_IMP(flt, dbl, qua);
-                       break;
-               case TYPE_dbl:
-                       ANALYTICAL_QUANTILE_AVG_IMP(dbl, dbl, qua);
-                       break;
-               default:
-                       goto input_nosupport;
-               }
-       } else {
-               switch (tp1) {
-               case TYPE_bte:
-                       ANALYTICAL_QUANTILE_AVG_CALC_MULTI(bte);
-                       break;
-               case TYPE_sht:
-                       ANALYTICAL_QUANTILE_AVG_CALC_MULTI(sht);
-                       break;
-               case TYPE_int:
-                       ANALYTICAL_QUANTILE_AVG_CALC_MULTI(int);
-                       break;
-               case TYPE_lng:
-                       ANALYTICAL_QUANTILE_AVG_CALC_MULTI(lng);
-                       break;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to