Commit e8c46094 authored by unknown's avatar unknown

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

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


sql/item.h:
  Auto merged
mysql-test/r/func_group.result:
  merging
mysql-test/t/func_group.test:
  merging
sql/item_sum.cc:
  merging
parents 3ebbb56d 33f1dfe4
...@@ -1287,6 +1287,15 @@ select var_samp(e) as '0.5', var_pop(e) as '0.25' from bug22555; ...@@ -1287,6 +1287,15 @@ select var_samp(e) as '0.5', var_pop(e) as '0.25' from bug22555;
0.5 0.25 0.5 0.25
0.5000 0.2500 0.5000 0.2500
drop table bug22555; 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); 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 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; INSERT INTO t1 SELECT a, b+8 FROM t1;
......
...@@ -800,6 +800,16 @@ select var_samp(e) as '0.5', var_pop(e) as '0.25' from bug22555; ...@@ -800,6 +800,16 @@ select var_samp(e) as '0.5', var_pop(e) as '0.25' from bug22555;
drop table 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 # Bug #23184: SELECT causes server crash
# #
......
...@@ -735,12 +735,11 @@ class Item { ...@@ -735,12 +735,11 @@ class Item {
virtual bool get_date_result(TIME *ltime,uint fuzzydate) virtual bool get_date_result(TIME *ltime,uint fuzzydate)
{ return get_date(ltime,fuzzydate); } { return get_date(ltime,fuzzydate); }
/* /*
This function is used only in Item_func_isnull/Item_func_isnotnull The method allows to determine nullness of a complex expression
(implementations of IS NULL/IS NOT NULL clauses). Item_func_is{not}null without fully evaluating it, instead of calling val/result*() then
calls this method instead of one of val/result*() methods, which checking null_value. Used in Item_func_isnull/Item_func_isnotnull
normally will set null_value. This allows to determine nullness of and Item_sum_count/Item_sum_count_distinct.
a complex expression without fully evaluating it. Any new item which can be NULL must implement this method.
Any new item which can be NULL must implement this call.
*/ */
virtual bool is_null() { return 0; } virtual bool is_null() { return 0; }
......
...@@ -1059,14 +1059,8 @@ void Item_sum_count::clear() ...@@ -1059,14 +1059,8 @@ void Item_sum_count::clear()
bool Item_sum_count::add() bool Item_sum_count::add()
{ {
if (!args[0]->maybe_null) if (!args[0]->maybe_null || !args[0]->is_null())
count++; count++;
else
{
args[0]->update_null_value();
if (!args[0]->null_value)
count++;
}
return 0; return 0;
} }
...@@ -1908,14 +1902,8 @@ void Item_sum_count::reset_field() ...@@ -1908,14 +1902,8 @@ void Item_sum_count::reset_field()
char *res=result_field->ptr; char *res=result_field->ptr;
longlong nr=0; longlong nr=0;
if (!args[0]->maybe_null) if (!args[0]->maybe_null || !args[0]->is_null())
nr=1; nr=1;
else
{
args[0]->update_null_value();
if (!args[0]->null_value)
nr=1;
}
int8store(res,nr); int8store(res,nr);
} }
...@@ -2018,14 +2006,8 @@ void Item_sum_count::update_field() ...@@ -2018,14 +2006,8 @@ void Item_sum_count::update_field()
char *res=result_field->ptr; char *res=result_field->ptr;
nr=sint8korr(res); nr=sint8korr(res);
if (!args[0]->maybe_null) if (!args[0]->maybe_null || !args[0]->is_null())
nr++; nr++;
else
{
args[0]->update_null_value();
if (!args[0]->null_value)
nr++;
}
int8store(res,nr); int8store(res,nr);
} }
...@@ -2449,12 +2431,8 @@ bool Item_sum_count_distinct::setup(THD *thd) ...@@ -2449,12 +2431,8 @@ bool Item_sum_count_distinct::setup(THD *thd)
Item *item=args[i]; Item *item=args[i];
if (list.push_back(item)) if (list.push_back(item))
return TRUE; // End of memory return TRUE; // End of memory
if (item->const_item()) if (item->const_item() && item->is_null())
{ always_null= 1;
item->update_null_value();
if (item->null_value)
always_null=1;
}
} }
if (always_null) if (always_null)
return FALSE; return FALSE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment