Commit 0535b220 authored by unknown's avatar unknown
Browse files

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

into  mysql.com:/home/ram/work/b21976/my50-b21976

parents 0f6bf015 9683b0ae
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1296,6 +1296,15 @@ select var_samp(e) as '0.5', var_pop(e) as '0.25' from bug22555;
0.5	0.25
0.5000	0.2500
drop table bug22555;
create table t1 (a decimal(20));
insert into t1 values (12345678901234567890);
select count(a) from t1;
count(a)
1
select count(distinct a) from t1;
count(distinct a)
1
drop table t1;
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
INSERT INTO t1 SELECT a, b+8       FROM t1;
+10 −1
Original line number Diff line number Diff line
@@ -793,6 +793,16 @@ select var_samp(e) as '0.5', var_pop(e) as '0.25' from bug22555;
drop table bug22555;


#
# Bug #21976: Unnecessary warning with count(decimal)
#

create table t1 (a decimal(20));
insert into t1 values (12345678901234567890);
select count(a) from t1;
select count(distinct a) from t1;
drop table t1;

#
# Bug #23184: SELECT causes server crash
# 
@@ -817,5 +827,4 @@ SELECT a,AVG(DISTINCT b) AS average FROM t1 GROUP BY a HAVING average > 50;

DROP TABLE t1;

###
--echo End of 5.0 tests
+5 −6
Original line number Diff line number Diff line
@@ -694,12 +694,11 @@ class Item {
  virtual bool get_date_result(TIME *ltime,uint fuzzydate)
  { return get_date(ltime,fuzzydate); }
  /*
    This function is used only in Item_func_isnull/Item_func_isnotnull
    (implementations of IS NULL/IS NOT NULL clauses). Item_func_is{not}null
    calls this method instead of one of val/result*() methods, which
    normally will set null_value. This allows to determine nullness of
    a complex expression without fully evaluating it.
    Any new item which can be NULL must implement this call.
    The method allows to determine nullness of a complex expression 
    without fully evaluating it, instead of calling val/result*() then 
    checking null_value. Used in Item_func_isnull/Item_func_isnotnull
    and Item_sum_count/Item_sum_count_distinct.
    Any new item which can be NULL must implement this method.
  */
  virtual bool is_null() { return 0; }

+5 −27
Original line number Diff line number Diff line
@@ -1050,14 +1050,8 @@ void Item_sum_count::clear()

bool Item_sum_count::add()
{
  if (!args[0]->maybe_null)
  if (!args[0]->maybe_null || !args[0]->is_null())
    count++;
  else
  {
    args[0]->update_null_value();
    if (!args[0]->null_value)
      count++;
  }
  return 0;
}

@@ -1890,14 +1884,8 @@ void Item_sum_count::reset_field()
  char *res=result_field->ptr;
  longlong nr=0;

  if (!args[0]->maybe_null)
    nr=1;
  else
  {
    args[0]->update_null_value();
    if (!args[0]->null_value)
  if (!args[0]->maybe_null || !args[0]->is_null())
    nr=1;
  }
  int8store(res,nr);
}

@@ -2000,14 +1988,8 @@ void Item_sum_count::update_field()
  char *res=result_field->ptr;

  nr=sint8korr(res);
  if (!args[0]->maybe_null)
    nr++;
  else
  {
    args[0]->update_null_value();
    if (!args[0]->null_value)
  if (!args[0]->maybe_null || !args[0]->is_null())
    nr++;
  }
  int8store(res,nr);
}

@@ -2431,13 +2413,9 @@ bool Item_sum_count_distinct::setup(THD *thd)
    Item *item=args[i];
    if (list.push_back(item))
      return TRUE;                              // End of memory
    if (item->const_item())
    {
      item->update_null_value();
      if (item->null_value)
    if (item->const_item() && item->is_null())
      always_null= 1;
  }
  }
  if (always_null)
    return FALSE;
  count_field_types(tmp_table_param,list,0);