Commit df3b7082 authored by evgen@moonbone.local's avatar evgen@moonbone.local
Browse files

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

into  moonbone.local:/mnt/gentoo64/work/28494-bug-5.0-opt-mysql
parents 55833d3a f70ae3a6
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -317,3 +317,10 @@ SHOW COUNT(*) WARNINGS;
SHOW COUNT(*) ERRORS;
@@session.error_count
1
create table t1(f1 int);
insert into t1 values(1),(1),(2);
select @a:=f1, count(f1) from t1 group by 1;
@a:=f1	count(f1)
1	2
2	1
drop table t1;
+8 −0
Original line number Diff line number Diff line
@@ -222,3 +222,11 @@ drop table t1,t2;
insert into city 'blah';
SHOW COUNT(*) WARNINGS;
SHOW COUNT(*) ERRORS;

#
# Bug#28494: Grouping by Item_func_set_user_var produces incorrect result.
#
create table t1(f1 int);
insert into t1 values(1),(1),(2);
select @a:=f1, count(f1) from t1 group by 1;
drop table t1;
+4 −2
Original line number Diff line number Diff line
@@ -4290,9 +4290,11 @@ void Item_func_set_user_var::make_field(Send_field *tmp_field)
    TRUE        Error
*/

int Item_func_set_user_var::save_in_field(Field *field, bool no_conversions)
int Item_func_set_user_var::save_in_field(Field *field, bool no_conversions,
                                          bool can_use_result_field)
{
  bool use_result_field= (result_field && result_field != field);
  bool use_result_field= (!can_use_result_field ? 0 :
                          (result_field && result_field != field));
  int error;

  /* Update the value of the user variable */
+7 −1
Original line number Diff line number Diff line
@@ -1220,7 +1220,13 @@ class Item_func_set_user_var :public Item_func
  void print(String *str);
  void print_as_stmt(String *str);
  const char *func_name() const { return "set_user_var"; }
  int save_in_field(Field *field, bool no_conversions);
  int save_in_field(Field *field, bool no_conversions,
                    bool can_use_result_field);
  int save_in_field(Field *field, bool no_conversions)
  {
    return save_in_field(field, no_conversions, 1);
  }
  void save_org_in_field(Field *field) { (void)save_in_field(field, 1, 0); }
};