Commit ef7570c7 authored by unknown's avatar unknown
Browse files

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

into mysql.com:/home/my/mysql-5.0


sql/sql_repl.cc:
  Auto merged
parents 1b002905 8400a5a4
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -1657,6 +1657,44 @@ a
b
c
d
select distinct a1,a1 from t1;
a1	a1
a	a
b	b
c	c
d	d
select distinct a2,a1,a2,a1 from t1;
a2	a1	a2	a1
a	a	a	a
b	a	b	a
a	b	a	b
b	b	b	b
a	c	a	c
b	c	b	c
a	d	a	d
b	d	b	d
select distinct t1.a1,t2.a1 from t1,t2;
a1	a1
a	a
b	a
c	a
d	a
a	b
b	b
c	b
d	b
a	c
b	c
c	c
d	c
a	d
b	d
c	d
d	d
a	e
b	e
c	e
d	e
explain select distinct a1,a2,b from t1;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	range	NULL	idx_t1_1	147	NULL	17	Using index for group-by
+28 −0
Original line number Diff line number Diff line
@@ -466,4 +466,32 @@ ERROR 70100: Query execution was interrupted
call bug6807()|
ERROR 70100: Query execution was interrupted
drop procedure bug6807|
drop procedure if exists bug8776_1|
drop procedure if exists bug8776_2|
drop procedure if exists bug8776_3|
drop procedure if exists bug8776_4|
create procedure bug8776_1()
begin
declare continue handler for sqlstate '42S0200test' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '42S0200test'
create procedure bug8776_2()
begin
declare continue handler for sqlstate '4200' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '4200'
create procedure bug8776_3()
begin
declare continue handler for sqlstate '420000' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '420000'
create procedure bug8776_4()
begin
declare continue handler for sqlstate '42x00' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '42x00'
drop table t1|
+5 −1
Original line number Diff line number Diff line
@@ -475,11 +475,15 @@ select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121
select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
select distinct b from t2 where (a2 >= 'b') and (b = 'a');

-- BUG 6303
-- BUG #6303
select distinct t_00.a1
from t1 t_00
where exists ( select * from t2 where a1 = t_00.a1 );

-- BUG #8532 - SELECT DISTINCT a, a causes server to crash
select distinct a1,a1 from t1;
select distinct a2,a1,a2,a1 from t1;
select distinct t1.a1,t2.a1 from t1,t2;

--
-- DISTINCT queries with GROUP-BY
+38 −0
Original line number Diff line number Diff line
@@ -641,6 +641,44 @@ call bug6807()|

drop procedure bug6807|

#
# BUG#876: Stored Procedures: Invalid SQLSTATE is allowed in 
#          a DECLARE ? HANDLER FOR stmt.
#
--disable_warnings
drop procedure if exists bug8776_1|
drop procedure if exists bug8776_2|
drop procedure if exists bug8776_3|
drop procedure if exists bug8776_4|
--enable_warnings
--error ER_SP_BAD_SQLSTATE
create procedure bug8776_1()
begin
  declare continue handler for sqlstate '42S0200test' begin end;
  begin end;
end|

--error ER_SP_BAD_SQLSTATE
create procedure bug8776_2()
begin
  declare continue handler for sqlstate '4200' begin end;
  begin end;
end|

--error ER_SP_BAD_SQLSTATE
create procedure bug8776_3()
begin
  declare continue handler for sqlstate '420000' begin end;
  begin end;
end|

--error ER_SP_BAD_SQLSTATE
create procedure bug8776_4()
begin
  declare continue handler for sqlstate '42x00' begin end;
  begin end;
end|


drop table t1|

+10 −1
Original line number Diff line number Diff line
@@ -6878,6 +6878,7 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree)
  SEL_ARG *cur_index_tree= NULL;
  ha_rows cur_quick_prefix_records= 0;
  uint cur_param_idx;
  key_map cur_used_key_parts;

  for (uint cur_index= 0 ; cur_index_info != cur_index_info_end ;
       cur_index_info++, cur_index++)
@@ -6925,17 +6926,25 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree)
    else if (join->select_distinct)
    {
      select_items_it.rewind();
      cur_used_key_parts.clear_all();
      while ((item= select_items_it++))
      {
        item_field= (Item_field*) item; /* (SA5) already checked above. */
        /* Find the order of the key part in the index. */
        key_part_nr= get_field_keypart(cur_index_info, item_field->field);
        /*
          Check if this attribute was already present in the select list.
          If it was present, then its corresponding key part was alredy used.
        */
        if (cur_used_key_parts.is_set(key_part_nr))
          continue;
        if (key_part_nr < 1 || key_part_nr > join->fields_list.elements)
          goto next_index;
        cur_part= cur_index_info->key_part + key_part_nr - 1;
        cur_group_prefix_len+= cur_part->store_length;
        cur_used_key_parts.set_bit(key_part_nr);
        ++cur_group_key_parts;
      }
      cur_group_key_parts= join->fields_list.elements;
    }
    else
      DBUG_ASSERT(FALSE);
Loading