Commit 55fea25d authored by igor@olga.mysql.com's avatar igor@olga.mysql.com
Browse files

Merge olga.mysql.com:/home/igor/mysql-5.0-opt

into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug28728
parents 5cbebf0a 294ead9a
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -318,9 +318,17 @@ 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;
insert into t1 values(1),(1),(2),(3),(4),(1),(3),(1);
select @a:=f1, count(f1) from t1 group by 1 desc;
@a:=f1	count(f1)
1	2
4	1
3	2
2	1
1	4
select @a:=f1, count(f1) from t1 group by 1 asc;
@a:=f1	count(f1)
1	4
2	1
3	2
4	1
drop table t1;
+3 −2
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@ 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;
insert into t1 values(1),(1),(2),(3),(4),(1),(3),(1);
select @a:=f1, count(f1) from t1 group by 1 desc;
select @a:=f1, count(f1) from t1 group by 1 asc;
drop table t1;
+34 −0
Original line number Diff line number Diff line
@@ -4208,6 +4208,40 @@ my_decimal *Item_func_set_user_var::val_decimal(my_decimal *val)
}


double Item_func_set_user_var::val_real_result()
{
  DBUG_ASSERT(fixed == 1);
  check(TRUE);
  update();					// Store expression
  return entry->val_real(&null_value);
}

longlong Item_func_set_user_var::val_int_result()
{
  DBUG_ASSERT(fixed == 1);
  check(TRUE);
  update();					// Store expression
  return entry->val_int(&null_value);
}

String *Item_func_set_user_var::val_str_result(String *str)
{
  DBUG_ASSERT(fixed == 1);
  check(TRUE);
  update();					// Store expression
  return entry->val_str(&null_value, str, decimals);
}


my_decimal *Item_func_set_user_var::val_decimal_result(my_decimal *val)
{
  DBUG_ASSERT(fixed == 1);
  check(TRUE);
  update();					// Store expression
  return entry->val_decimal(&null_value, val);
}


void Item_func_set_user_var::print(String *str)
{
  str->append(STRING_WITH_LEN("(@"));
+4 −0
Original line number Diff line number Diff line
@@ -1208,6 +1208,10 @@ class Item_func_set_user_var :public Item_func
  longlong val_int();
  String *val_str(String *str);
  my_decimal *val_decimal(my_decimal *);
  double val_real_result();
  longlong val_int_result();
  String *val_str_result(String *str);
  my_decimal *val_decimal_result(my_decimal *);
  bool update_hash(void *ptr, uint length, enum Item_result type,
  		   CHARSET_INFO *cs, Derivation dv, bool unsigned_arg);
  bool send(Protocol *protocol, String *str_arg);