From 196e995caf912d80cd25be2318a3d0d042452ea7 Mon Sep 17 00:00:00 2001 From: "sasha@mysql.sashanet.com" <> Date: Tue, 29 May 2001 19:19:18 -0600 Subject: [PATCH] cheat when all parts of count(distinct) key are binary --- sql/item_sum.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 914d9f2791c..2d65cf1bab2 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -926,15 +926,26 @@ bool Item_sum_count_distinct::setup(THD *thd) } else // too bad, cannot cheat - there is more than one field { - cmp_arg = (void*)this; - compare_key = (qsort_cmp2)composite_key_cmp; + bool all_binary = 1; Field** field, **field_end; field_end = (field = table->field) + table->fields; for(key_len = 0; field < field_end; ++field) { key_len += (*field)->field_length; + if(!(*field)->binary()) + all_binary = 0; } rec_offset = table->reclength - key_len; + if(all_binary) + { + compare_key = (qsort_cmp2)simple_raw_key_cmp; + cmp_arg = (void*)key_len; + } + else + { + compare_key = (qsort_cmp2)composite_key_cmp ; + cmp_arg = (void*)this; + } } init_tree(&tree, min(max_heap_table_size, sortbuff_size/16),