mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge mysql.com:/home/ram/work/mysql-5.0-maint
into mysql.com:/home/ram/work/b21976/my50-b21976
This commit is contained in:
@ -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;
|
||||
|
@ -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
|
||||
|
11
sql/item.h
11
sql/item.h
@ -694,12 +694,11 @@ public:
|
||||
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; }
|
||||
|
||||
|
@ -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)
|
||||
if (!args[0]->maybe_null || !args[0]->is_null())
|
||||
nr=1;
|
||||
else
|
||||
{
|
||||
args[0]->update_null_value();
|
||||
if (!args[0]->null_value)
|
||||
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)
|
||||
if (!args[0]->maybe_null || !args[0]->is_null())
|
||||
nr++;
|
||||
else
|
||||
{
|
||||
args[0]->update_null_value();
|
||||
if (!args[0]->null_value)
|
||||
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);
|
||||
|
Reference in New Issue
Block a user