Changeset: fe5e43e765fb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe5e43e765fb
Added Files:
        sql/test/BugTracker-2020/Tests/All
        sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.sql
        sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.err
        sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.out
Modified Files:
        gdk/gdk_aggr.c
Branch: default
Log Message:

Merge with Nov2019 branch


diffs (266 lines):

diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -2711,6 +2711,19 @@ BATmax_skipnil(BAT *b, void *aggr, bit s
 #define binsearch_oid(indir, offset, vals, lo, hi, v, ordering, last) 
binsearch_lng(indir, offset, (const lng *) vals, lo, hi, (lng) (v), ordering, 
last)
 #endif
 
+#define DO_QUANTILE_AVG(TPE) \
+       do { \
+               TPE low = *(TPE*) BUNtail(bi, r + (BUN) hi); \
+               TPE high = *(TPE*) BUNtail(bi, r + (BUN) lo); \
+               if (is_##TPE##_nil(low) || is_##TPE##_nil(high)) { \
+                       v = dnil; \
+                       nils++; \
+               } else { \
+                       val = (f - lo) * low + (lo + 1 - f) * high; \
+                       v = &val; \
+               } \
+       } while (0)
+
 static BAT *
 doBATgroupquantile(BAT *b, BAT *g, BAT *e, BAT *s, int tp, double quantile,
                   bool skip_nils, bool abort_on_error, bool average)
@@ -2862,30 +2875,29 @@ doBATgroupquantile(BAT *b, BAT *g, BAT *
                                double hi = ceil(f);
                                switch (ATOMbasetype(tp)) {
                                case TYPE_bte:
-                                       val = (f - lo) * *(bte*)BUNtail(bi, r + 
(BUN) hi) + (lo + 1 - f) * *(bte*)BUNtail(bi, r + (BUN) lo);
+                                       DO_QUANTILE_AVG(bte);
                                        break;
                                case TYPE_sht:
-                                       val = (f - lo) * *(sht*)BUNtail(bi, r + 
(BUN) hi) + (lo + 1 - f) * *(sht*)BUNtail(bi, r + (BUN) lo);
+                                       DO_QUANTILE_AVG(sht);
                                        break;
                                case TYPE_int:
-                                       val = (f - lo) * *(int*)BUNtail(bi, r + 
(BUN) hi) + (lo + 1 - f) * *(int*)BUNtail(bi, r + (BUN) lo);
+                                       DO_QUANTILE_AVG(int);
                                        break;
                                case TYPE_lng:
-                                       val = (f - lo) * *(lng*)BUNtail(bi, r + 
(BUN) hi) + (lo + 1 - f) * *(lng*)BUNtail(bi, r + (BUN) lo);
+                                       DO_QUANTILE_AVG(lng);
                                        break;
 #ifdef HAVE_HGE
                                case TYPE_hge:
-                                       val = (f - lo) * *(hge*)BUNtail(bi, r + 
(BUN) hi) + (lo + 1 - f) * *(hge*)BUNtail(bi, r + (BUN) lo);
+                                       DO_QUANTILE_AVG(hge);
                                        break;
 #endif
                                case TYPE_flt:
-                                       val = (f - lo) * *(flt*)BUNtail(bi, r + 
(BUN) hi) + (lo + 1 - f) * *(flt*)BUNtail(bi, r + (BUN) lo);
+                                       DO_QUANTILE_AVG(flt);
                                        break;
                                case TYPE_dbl:
-                                       val = (f - lo) * *(dbl*)BUNtail(bi, r + 
(BUN) hi) + (lo + 1 - f) * *(dbl*)BUNtail(bi, r + (BUN) lo);
+                                       DO_QUANTILE_AVG(dbl);
                                        break;
                                }
-                               v = &val;
                        } else {
                                /* round *down* to nearest integer */
                                double f = (p - r - 1) * quantile;
@@ -2953,30 +2965,29 @@ doBATgroupquantile(BAT *b, BAT *g, BAT *
                        double hi = ceil(f);
                        switch (ATOMbasetype(tp)) {
                        case TYPE_bte:
-                               val = (f - lo) * *(bte*)BUNtail(bi, r + (BUN) 
hi) + (lo + 1 - f) * *(bte*)BUNtail(bi, r + (BUN) lo);
+                               DO_QUANTILE_AVG(bte);
                                break;
                        case TYPE_sht:
-                               val = (f - lo) * *(sht*)BUNtail(bi, r + (BUN) 
hi) + (lo + 1 - f) * *(sht*)BUNtail(bi, r + (BUN) lo);
+                               DO_QUANTILE_AVG(sht);
                                break;
                        case TYPE_int:
-                               val = (f - lo) * *(int*)BUNtail(bi, r + (BUN) 
hi) + (lo + 1 - f) * *(int*)BUNtail(bi, r + (BUN) lo);
+                               DO_QUANTILE_AVG(int);
                                break;
                        case TYPE_lng:
-                               val = (f - lo) * *(lng*)BUNtail(bi, r + (BUN) 
hi) + (lo + 1 - f) * *(lng*)BUNtail(bi, r + (BUN) lo);
+                               DO_QUANTILE_AVG(lng);
                                break;
 #ifdef HAVE_HGE
                        case TYPE_hge:
-                               val = (f - lo) * *(hge*)BUNtail(bi, r + (BUN) 
hi) + (lo + 1 - f) * *(hge*)BUNtail(bi, r + (BUN) lo);
+                               DO_QUANTILE_AVG(hge);
                                break;
 #endif
                        case TYPE_flt:
-                               val = (f - lo) * *(flt*)BUNtail(bi, r + (BUN) 
hi) + (lo + 1 - f) * *(flt*)BUNtail(bi, r + (BUN) lo);
+                               DO_QUANTILE_AVG(flt);
                                break;
                        case TYPE_dbl:
-                               val = (f - lo) * *(dbl*)BUNtail(bi, r + (BUN) 
hi) + (lo + 1 - f) * *(dbl*)BUNtail(bi, r + (BUN) lo);
+                               DO_QUANTILE_AVG(dbl);
                                break;
                        }
-                       v = &val;
                } else {
                        double f;
                        /* round (p-r-1)*quantile *down* to nearest
diff --git a/sql/test/BugTracker-2020/Tests/All 
b/sql/test/BugTracker-2020/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2020/Tests/All
@@ -0,0 +1,1 @@
+median_avg-nulls.Bug-6807
diff --git a/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.sql 
b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.sql
@@ -0,0 +1,7 @@
+SELECT median_avg(c1) FROM (VALUES (1), (10)) t1(c1);
+SELECT median_avg(c1) FROM (VALUES (1), (NULL)) t1(c1);
+SELECT quantile_avg(c1, 0.2) FROM (VALUES (1), (NULL)) t1(c1);
+SELECT quantile_avg(c1, 0.1) FROM (VALUES (1), (10)) t1(c1);
+
+SELECT c2, median_avg(c1) FROM (VALUES (1, 1), (NULL, 1), (1, 2), (2, 2), 
(NULL, 3), (NULL, 3)) t1(c1,c2) GROUP BY c2;
+SELECT c2, quantile_avg(c1, 0.7) FROM (VALUES (1, 1), (NULL, 1), (1, 2), (2, 
2), (NULL, 3), (NULL, 3)) t1(c1,c2) GROUP BY c2;
diff --git 
a/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.err 
b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.err
@@ -0,0 +1,30 @@
+stderr of test 'median_avg-nulls.Bug-6807` in directory 
'sql/test/BugTracker-2020` itself:
+
+
+# 09:32:52 >  
+# 09:32:52 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=38788" "--set" 
"mapi_usock=/var/tmp/mtest-50838/.s.monetdb.38788" "--forcemito" 
"--dbpath=/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2020"
 "--set" "embedded_c=true"
+# 09:32:52 >  
+
+# builtin opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/monetdb5/dbfarm/demo
+# builtin opt  mapi_port = 50000
+# builtin opt  mapi_open = false
+# builtin opt  mapi_ipv6 = false
+# builtin opt  mapi_autosense = false
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_open = true
+# cmdline opt  mapi_port = 38788
+# cmdline opt  mapi_usock = /var/tmp/mtest-50838/.s.monetdb.38788
+# cmdline opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2020
+# cmdline opt  embedded_c = true
+
+# 09:32:52 >  
+# 09:32:52 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-50838" "--port=38788"
+# 09:32:52 >  
+
+
+# 09:32:53 >  
+# 09:32:53 >  "Done."
+# 09:32:53 >  
+
diff --git 
a/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.out 
b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.out
@@ -0,0 +1,109 @@
+stdout of test 'median_avg-nulls.Bug-6807` in directory 
'sql/test/BugTracker-2020` itself:
+
+
+# 09:32:52 >  
+# 09:32:52 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=38788" "--set" 
"mapi_usock=/var/tmp/mtest-50838/.s.monetdb.38788" "--forcemito" 
"--dbpath=/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2020"
 "--set" "embedded_c=true"
+# 09:32:52 >  
+
+# MonetDB 5 server v11.35.6 (hg id: 88e6bb266e81)
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2020', using 8 threads
+# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers
+# Found 15.498 GiB available main-memory of which we use 12.631 GiB
+# Copyright (c) 1993 - July 2008 CWI.
+# Copyright (c) August 2008 - 2020 MonetDB B.V., all rights reserved
+# Visit https://www.monetdb.org/ for further information
+# Listening for connection requests on 
mapi:monetdb://localhost.localdomain:38788/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-50838/.s.monetdb.38788
+# MonetDB/GIS module loaded
+# SQL catalog created, loading sql scripts once
+# loading sql script: 09_like.sql
+# loading sql script: 10_math.sql
+# loading sql script: 12_url.sql
+# loading sql script: 13_date.sql
+# loading sql script: 14_inet.sql
+# loading sql script: 15_querylog.sql
+# loading sql script: 16_tracelog.sql
+# loading sql script: 17_temporal.sql
+# loading sql script: 18_index.sql
+# loading sql script: 20_vacuum.sql
+# loading sql script: 21_dependency_views.sql
+# loading sql script: 22_clients.sql
+# loading sql script: 23_skyserver.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 26_sysmon.sql
+# loading sql script: 27_rejects.sql
+# loading sql script: 39_analytics.sql
+# loading sql script: 39_analytics_hge.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 40_json.sql
+# loading sql script: 40_json_hge.sql
+# loading sql script: 41_md5sum.sql
+# loading sql script: 45_uuid.sql
+# loading sql script: 46_profiler.sql
+# loading sql script: 51_sys_schema_extension.sql
+# loading sql script: 60_wlcr.sql
+# loading sql script: 61_wlcr.sql
+# loading sql script: 72_fits.sql
+# loading sql script: 74_netcdf.sql
+# loading sql script: 75_lidar.sql
+# loading sql script: 75_shp.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_statistics.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 80_udf_hge.sql
+# loading sql script: 85_bam.sql
+# loading sql script: 90_generator.sql
+# loading sql script: 90_generator_hge.sql
+# loading sql script: 99_system.sql
+# MonetDB/SQL module loaded
+
+# 09:32:52 >  
+# 09:32:52 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-50838" "--port=38788"
+# 09:32:52 >  
+
+#SELECT median_avg(c1) FROM (VALUES (1), (10)) t1(c1);
+% .%2 # table_name
+% %2 # name
+% double # type
+% 24 # length
+[ 5.5  ]
+#SELECT median_avg(c1) FROM (VALUES (1), (NULL)) t1(c1);
+% .%2 # table_name
+% %2 # name
+% double # type
+% 24 # length
+[ NULL ]
+#SELECT quantile_avg(c1, 0.2) FROM (VALUES (1), (NULL)) t1(c1);
+% .%2 # table_name
+% %2 # name
+% double # type
+% 24 # length
+[ NULL ]
+#SELECT quantile_avg(c1, 0.1) FROM (VALUES (1), (10)) t1(c1);
+% .%2 # table_name
+% %2 # name
+% double # type
+% 24 # length
+[ 1.9  ]
+#SELECT c2, median_avg(c1) FROM (VALUES (1, 1), (NULL, 1), (1, 2), (2, 2), 
(NULL, 3), (NULL, 3)) t1(c1,c2) GROUP BY c2;
+% .t1, .%3 # table_name
+% c2,  %3 # name
+% tinyint,     double # type
+% 1,   24 # length
+[ 1,   1       ]
+[ 2,   1.5     ]
+[ 3,   NULL    ]
+#SELECT c2, quantile_avg(c1, 0.7) FROM (VALUES (1, 1), (NULL, 1), (1, 2), (2, 
2), (NULL, 3), (NULL, 3)) t1(c1,c2) GROUP BY c2;
+% .t1, .%3 # table_name
+% c2,  %3 # name
+% tinyint,     double # type
+% 1,   24 # length
+[ 1,   1       ]
+[ 2,   1.7     ]
+[ 3,   NULL    ]
+
+# 09:32:53 >  
+# 09:32:53 >  "Done."
+# 09:32:53 >  
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to