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