Item_sum_count_distinct, and
deploy Unique for use with COUNT(DISTINCT) if there is no blob
column in the list of DISTINCT arguments.
mysql-test/r/count_distinct2.result:
Test results fixed.
mysql-test/r/func_group.result:
Updated.
mysql-test/r/sum_distinct.result:
Updated.
mysql-test/t/func_group.test:
Add a test for COUNT(DISTINCT) and true varchar and case-insensitive
collation. The table in the test contains only two distinct values.
mysql-test/t/sum_distinct.test:
Since now we support INSERT INTO t1 (a) SELECT a+1 FROM t1, shorten
the test.
Add a nominal test for AVG(DISTINCT)
sql/item_sum.cc:
Implementation of cleaned up Item_sum_count_distinct.
Fixed a bug with COUNT(DISTINCT) and new VARCHAR and collations.
Fixed a bug wiht AVG(DISTINCT) and wrong number of output digits
after decimal point.
sql/item_sum.h:
Cleanup for Item_sum_count_distinct.
Now if the list of distinct arguments doesn't contain a blob column,
we always use Unique and merge-sort to find distinct values.
sql/sql_class.h:
Added a short-cut to find number of elements in Unique if all elements fit
into memory.
sql/filesort.cc:
Snippet of filesort() code moved to function reuse_freed_buff() -
change buffpek pointers to use buff from freed BUFFPEK
Used in filesort() and merge_walk().
sql/item_sum.cc:
Implementation of Item_sum_sum_distinct - SUM(DISTINCT) item,
which uses Unique to resolve duplicates
sql/item_sum.h:
New sum Item added - Item_sum_sum_distinct - for SUM(DISTINCT) function
sql/sql_class.h:
added walk() and reset() methods to Unique, used in Item_sum_sum_distinct.
sql/sql_sort.h:
declaration for reuse_freed_buff() to be able to use it in uniques.cc
sql/sql_yacc.yy:
parser extended to handle MIN(DISTICNT), MAX(DISTINCT), SUM(DISTINCT)
sql/uniques.cc:
Implementation for Unique::reset(), Unique::walk() as well as for merge_walk()
algorithm.