Changeset: fd6816d3fa73 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fd6816d3fa73
Modified Files:
        gdk/ChangeLog.Jan2022
        gdk/gdk_aggr.c
        sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test
Branch: Jan2022
Log Message:

Fix ungrouped average median/quantile aggregate.


diffs (59 lines):

diff --git a/gdk/ChangeLog.Jan2022 b/gdk/ChangeLog.Jan2022
--- a/gdk/ChangeLog.Jan2022
+++ b/gdk/ChangeLog.Jan2022
@@ -1,3 +1,7 @@
 # ChangeLog file for GDK
 # This file is updated with Maddlog
 
+* Wed Aug 24 2022 Sjoerd Mullender <sjo...@acm.org>
+- The median_avg and quantile_avg returned bogus results in the
+  non-grouped case (i.e. something like SELECT sys.median_avg(i) FROM t).
+
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -4045,8 +4045,16 @@ BATmax(BAT *b, void *aggr)
 
 #define DO_QUANTILE_AVG(TPE)                                           \
        do {                                                            \
-               TPE low = *(TPE*) BUNtloc(bi, r + (BUN) hi);            \
-               TPE high = *(TPE*) BUNtloc(bi, r + (BUN) lo);           \
+               BUN idxlo, idxhi;                                       \
+               if (ords) {                                             \
+                       idxlo = ords[r + (BUN) lo] - b->hseqbase;       \
+                       idxhi = ords[r + (BUN) hi] - b->hseqbase;       \
+               } else {                                                \
+                       idxlo = r + (BUN) lo;                           \
+                       idxhi = r + (BUN) hi;                           \
+               }                                                       \
+               TPE low = *(TPE*) BUNtloc(bi, idxhi);                   \
+               TPE high = *(TPE*) BUNtloc(bi, idxlo);                  \
                if (is_##TPE##_nil(low) || is_##TPE##_nil(high)) {      \
                        val = dbl_nil;                                  \
                        nils++;                                         \
@@ -4213,6 +4221,7 @@ doBATgroupquantile(BAT *b, BAT *g, BAT *
                                double f = (p - r - 1) * quantile;
                                double lo = floor(f);
                                double hi = ceil(f);
+                               const oid *const ords = NULL;
                                switch (ATOMbasetype(tp)) {
                                case TYPE_bte:
                                        DO_QUANTILE_AVG(bte);
diff --git a/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test 
b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test
--- a/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test
+++ b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test
@@ -6,12 +6,12 @@ 5.500
 query R rowsort
 SELECT median_avg(c1) FROM (VALUES (1), (NULL)) t1(c1)
 ----
-NULL
+1.000
 
 query R rowsort
 SELECT quantile_avg(c1, 0.2) FROM (VALUES (1), (NULL)) t1(c1)
 ----
-NULL
+1.000
 
 query R rowsort
 SELECT quantile_avg(c1, 0.1) FROM (VALUES (1), (10)) t1(c1)
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to