Changeset: c6fe5acf0f8e for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c6fe5acf0f8e Modified Files: monetdb5/optimizer/opt_mergetable.c sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err sql/test/Tests/median_stdev.sql sql/test/Tests/median_stdev.stable.out sql/test/Tests/trace.stable.out Branch: default Log Message:
fix problem with median and mergetable optimizer diffs (116 lines): diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -1967,8 +1967,11 @@ OPTmergetableImplementation(Client cntxt actions++; continue; } - if (match == 3 && getModuleId(p) == aggrRef && p->argc == 4) - assert(0); + /* median */ + if (match == 3 && getModuleId(p) == aggrRef && p->argc == 4) { + error++; + goto fail; + } /* * @- * Aggregate handling is a prime target for optimization. diff --git a/sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err b/sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err --- a/sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err +++ b/sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err @@ -80,12 +80,13 @@ stderr of test 'cardinality_violation.SF # 21:00:43 > mclient -lsql -umonetdb -Pmonetdb --host=alf --port=38808 # 21:00:43 > -MAPI = monetdb@niels:39633 +MAPI = monetdb@niels:35277 QUERY = select * from env() as env where name = ( select 'prefix' from env() as env ); ERROR = !cardinality violation (21>1) -MAPI = monetdb@niels:39633 +MAPI = monetdb@niels:35277 QUERY = select * from columns where name = (select columns.name from _tables, columns where _tables.id = columns.table_id); -ERROR = !cardinality violation (300>1) +ERROR = !cardinality violation (299>1) + # 21:00:43 > # 21:00:43 > Done. diff --git a/sql/test/Tests/median_stdev.sql b/sql/test/Tests/median_stdev.sql --- a/sql/test/Tests/median_stdev.sql +++ b/sql/test/Tests/median_stdev.sql @@ -20,9 +20,9 @@ INSERT INTO sampleData VALUES ( 5, 0 ) SELECT count(*) from sampleData; -- Median tests -SELECT median(numValue) FROM sampleData; -- should return 6.5 (or 6, or 7) +SELECT median(numValue) FROM sampleData; -- should return 6 SELECT median(groupID) FROM sampleData; -- should return 2 -SELECT groupID, median(numValue) FROM sampleData GROUP BY groupID; -- should return (6, 5, 34.5, 18, 0) +SELECT groupID, median(numValue) FROM sampleData GROUP BY groupID; -- should return (6, 5, 17, 18, 0) SELECT R.groupID, AVG(1.0*R.numValue) AS medianValue diff --git a/sql/test/Tests/median_stdev.stable.out b/sql/test/Tests/median_stdev.stable.out --- a/sql/test/Tests/median_stdev.stable.out +++ b/sql/test/Tests/median_stdev.stable.out @@ -39,6 +39,48 @@ Ready. [ 1 ] [ 1 ] [ 1 ] +#INSERT INTO sampleData VALUES ( 5, 0 ); +[ 1 ] +#SELECT count(*) from sampleData; +% sys.sampledata # table_name +% L1 # name +% wrd # type +% 2 # length +[ 17 ] +#SELECT median(numValue) FROM sampleData; -- should return 6.5 (or 6, or 7) +% sys.sampledata # table_name +% L1 # name +% int # type +% 1 # length +[ 6 ] +#SELECT median(groupID) FROM sampleData; -- should return 2 +% sys.sampledata # table_name +% L1 # name +% int # type +% 1 # length +[ 2 ] +#SELECT groupID, median(numValue) FROM sampleData GROUP BY groupID; -- should return (6, 5, 34.5, 18, 0) +% sys.sampledata, sys.sampledata # table_name +% groupid, L1 # name +% int, int # type +% 1, 2 # length +[ 1, 6 ] +[ 2, 5 ] +[ 3, 17 ] +[ 4, 18 ] +[ 5, 0 ] +#SELECT R.groupID, AVG(1.0*R.numValue) AS medianValue +#FROM +#( SELECT GroupID, numValue, ROW_NUMBER() OVER(PARTITION BY groupID ORDER BY NumValue) AS rowno +# FROM sampleData +#) R +#INNER JOIN +#( SELECT GroupID, 1+count(*) as N +# FROM sampleData +# GROUP BY GroupID +#) G +#ON R.GroupID = G.GroupID AND R.rowNo BETWEEN N/2 AND N/2+N%2 +#GROUP BY R.groupID; % sys.r, . # table_name % groupid, medianvalue # name % int, double # type diff --git a/sql/test/Tests/trace.stable.out b/sql/test/Tests/trace.stable.out --- a/sql/test/Tests/trace.stable.out +++ b/sql/test/Tests/trace.stable.out @@ -35,7 +35,7 @@ Ready. % L1 # name % wrd # type % 2 # length -[ 17 ] +[ 16 ] # 11:14:41 > # 11:14:41 > Done. _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list