Commit 1c7b61e3 authored by unknown's avatar unknown
Browse files

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0

into  moonbone.local:/work/mysql-5.0-bug-9593


sql/sql_select.cc:
  Auto merged
parents 40e99987 73c46d05
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -60,3 +60,9 @@ count(distinct a)
1
1
drop table t1;
create table t1 (f1 int, f2 int);
insert into t1 values (0,1),(1,2);
select count(distinct if(f1,3,f2)) from t1;
count(distinct if(f1,3,f2))
2
drop table t1;
+12 −0
Original line number Diff line number Diff line
@@ -63,3 +63,15 @@ create table t1 (a char(3), b char(20), primary key (a, b));
insert into t1 values ('ABW', 'Dutch'), ('ABW', 'English');
select count(distinct a) from t1 group by b;
drop table t1;

#
# Bug #9593 "The combination of COUNT, DISTINCT and CONCAT 
#            seems to lock the server"
# Bug appears only on Windows system
#

create table t1 (f1 int, f2 int);
insert into t1 values (0,1),(1,2);
select count(distinct if(f1,3,f2)) from t1;
drop table t1;
+11 −6
Original line number Diff line number Diff line
@@ -12313,7 +12313,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
{
  Item *pos;
  List_iterator_fast<Item> li(all_fields);
  Copy_field *copy;
  Copy_field *copy= NULL;
  res_selected_fields.empty();
  res_all_fields.empty();
  List_iterator_fast<Item> itr(res_all_fields);
@@ -12321,7 +12321,8 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
  uint i, border= all_fields.elements - elements;
  DBUG_ENTER("setup_copy_fields");

  if (!(copy=param->copy_field= new Copy_field[param->field_count]))
  if (param->field_count && 
      !(copy=param->copy_field= new Copy_field[param->field_count]))
    goto err2;

  param->copy_funcs.empty();
@@ -12360,11 +12361,14 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
	char *tmp=(char*) sql_alloc(field->pack_length()+1);
	if (!tmp)
	  goto err;
      if (copy)
      {
        copy->set(tmp, item->result_field);
        item->result_field->move_field(copy->to_ptr,copy->to_null_ptr,1);
        copy++;
      }				
      }
    }
    else if ((pos->type() == Item::FUNC_ITEM ||
	      pos->type() == Item::SUBSELECT_ITEM ||
	      pos->type() == Item::CACHE_ITEM ||
@@ -12405,6 +12409,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
  DBUG_RETURN(0);

 err:
  if (copy)
    delete [] param->copy_field;			// This is never 0
  param->copy_field=0;
err2: