Changeset: fb66b11cc3bd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fb66b11cc3bd
Added Files:
        sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.sql
        sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.err
        sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.out
Modified Files:
        gdk/gdk_aggr.c
        sql/test/BugTracker-2013/Tests/All
Branch: Feb2013
Log Message:

When calculating grouped medians, deal with dense group bat.
Also added test.
This fixes bug 3389.


diffs (196 lines):

diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -2061,6 +2061,8 @@ BATgroupmedian(BAT *b, BAT *g, BAT *e, B
        }
 
        if (s) {
+               /* there is a candidate list, replace b (and g, if
+                * given) with just the values we're interested in */
                b = BATleftjoin(s, b, BATcount(s));
                if (b->htype != TYPE_void) {
                        t1 = BATmirror(BATmark(BATmirror(b), 0));
@@ -2079,7 +2081,19 @@ BATgroupmedian(BAT *b, BAT *g, BAT *e, B
                }
        }
 
+       /* we want to sort b so that we can figure out the median, but
+        * if g is given, sort g and subsort b so that we can get the
+        * median for each group */
        if (g) {
+               if (BATtdense(g)) {
+                       /* singleton groups, so calculating medians is
+                        * easy */
+                       bn = BATcopy(b, TYPE_void, b->ttype, 0);
+                       BATseqbase(bn, g->tseqbase);
+                       if (freeg)
+                               BBPunfix(g->batCacheid);
+                       return bn;
+               }
                BATsubsort(&t1, &t2, NULL, g, NULL, NULL, 0, 0);
                if (freeg)
                        BBPunfix(g->batCacheid);
diff --git a/sql/test/BugTracker-2013/Tests/All 
b/sql/test/BugTracker-2013/Tests/All
--- a/sql/test/BugTracker-2013/Tests/All
+++ b/sql/test/BugTracker-2013/Tests/All
@@ -51,3 +51,4 @@ swapped_likejoin.Bug-3375
 python-explain.Bug-3380
 case-orderby.Bug-3388
 unop_vs_aggr.Bug-3885
+singleton-median.Bug-3389
diff --git a/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.sql 
b/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.sql
@@ -0,0 +1,16 @@
+start transaction;
+
+create table table3389 (k int,b int);
+insert into table3389 values (1,2);
+insert into table3389 values (2,2);
+insert into table3389 values (3,3);
+insert into table3389 values (4,65);
+insert into table3389 values (5,21);
+insert into table3389 values (6,null);
+insert into table3389 values (7,null);
+insert into table3389 values (8,null);
+insert into table3389 values (9,null);
+
+select median(b) from table3389 group by k;
+
+rollback;
diff --git 
a/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.err 
b/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.err
@@ -0,0 +1,35 @@
+stderr of test 'singleton-median.Bug-3389` in directory 
'sql/test/BugTracker-2013` itself:
+
+
+# 20:37:01 >  
+# 20:37:01 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=31822" "--set" 
"mapi_usock=/var/tmp/mtest-20311/.s.monetdb.31822" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/home/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2013"
 "--set" "mal_listing=0"
+# 20:37:01 >  
+
+# builtin opt  gdk_dbpath = /home/sjoerd/Monet-stable/var/monetdb5/dbfarm/demo
+# builtin opt  gdk_debug = 0
+# builtin opt  gdk_vmtrim = yes
+# builtin opt  monet_prompt = >
+# builtin opt  monet_daemon = no
+# builtin opt  mapi_port = 50000
+# builtin opt  mapi_open = 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 = 31822
+# cmdline opt  mapi_usock = /var/tmp/mtest-20311/.s.monetdb.31822
+# cmdline opt  monet_prompt = 
+# cmdline opt  mal_listing = 2
+# cmdline opt  gdk_dbpath = 
/home/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2013
+# cmdline opt  mal_listing = 0
+
+# 20:37:01 >  
+# 20:37:01 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-20311" "--port=31822"
+# 20:37:01 >  
+
+
+# 20:37:01 >  
+# 20:37:01 >  "Done."
+# 20:37:01 >  
+
diff --git 
a/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.out 
b/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/Tests/singleton-median.Bug-3389.stable.out
@@ -0,0 +1,90 @@
+stdout of test 'singleton-median.Bug-3389` in directory 
'sql/test/BugTracker-2013` itself:
+
+
+# 20:37:01 >  
+# 20:37:01 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=31822" "--set" 
"mapi_usock=/var/tmp/mtest-20311/.s.monetdb.31822" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/home/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2013"
 "--set" "mal_listing=0"
+# 20:37:01 >  
+
+# MonetDB 5 server v11.15.18 (hg id: 92f9d7980dd3+)
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2013', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
+# Found 7.735 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2013 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://gaai.mullender.nl:31822/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-20311/.s.monetdb.31822
+# MonetDB/GIS module loaded
+# MonetDB/JAQL module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+# SQL catalog created, loading sql scripts once
+# loading sql script: 09_like.sql
+# loading sql script: 10_math.sql
+# loading sql script: 11_times.sql
+# loading sql script: 12_url.sql
+# loading sql script: 13_date.sql
+# loading sql script: 14_inet.sql
+# loading sql script: 15_history.sql
+# loading sql script: 16_tracelog.sql
+# loading sql script: 17_compress.sql
+# loading sql script: 18_dictionary.sql
+# loading sql script: 19_cluster.sql
+# loading sql script: 20_vacuum.sql
+# loading sql script: 21_dependency_functions.sql
+# loading sql script: 22_clients.sql
+# loading sql script: 23_skyserver.sql
+# loading sql script: 24_zorder.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 39_analytics.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 99_system.sql
+
+# 20:37:01 >  
+# 20:37:01 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-20311" "--port=31822"
+# 20:37:01 >  
+
+#start transaction;
+#create table table3389 (k int,b int);
+#insert into table3389 values (1,2);
+[ 1    ]
+#insert into table3389 values (2,2);
+[ 1    ]
+#insert into table3389 values (3,3);
+[ 1    ]
+#insert into table3389 values (4,65);
+[ 1    ]
+#insert into table3389 values (5,21);
+[ 1    ]
+#insert into table3389 values (6,null);
+[ 1    ]
+#insert into table3389 values (7,null);
+[ 1    ]
+#insert into table3389 values (8,null);
+[ 1    ]
+#insert into table3389 values (9,null);
+[ 1    ]
+#select median(b) from table3389 group by k;
+% sys.L1 # table_name
+% L1 # name
+% int # type
+% 2 # length
+[ 2    ]
+[ 2    ]
+[ 3    ]
+[ 65   ]
+[ 21   ]
+[ NULL ]
+[ NULL ]
+[ NULL ]
+[ NULL ]
+#rollback;
+
+# 20:37:01 >  
+# 20:37:01 >  "Done."
+# 20:37:01 >  
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to