Fix for bug #13820 (No warning on log(NEGATIVE))
This commit is contained in:
parent
35e1684206
commit
15fbd07a22
@ -170,3 +170,30 @@ insert into t1 values (1);
|
||||
select rand(i) from t1;
|
||||
ERROR HY000: Incorrect arguments to RAND
|
||||
drop table t1;
|
||||
set sql_mode='traditional';
|
||||
select ln(-1);
|
||||
ln(-1)
|
||||
NULL
|
||||
Warnings:
|
||||
Error 1365 Division by 0
|
||||
select log10(-1);
|
||||
log10(-1)
|
||||
NULL
|
||||
Warnings:
|
||||
Error 1365 Division by 0
|
||||
select log2(-1);
|
||||
log2(-1)
|
||||
NULL
|
||||
Warnings:
|
||||
Error 1365 Division by 0
|
||||
select log(2,-1);
|
||||
log(2,-1)
|
||||
NULL
|
||||
Warnings:
|
||||
Error 1365 Division by 0
|
||||
select log(-2,1);
|
||||
log(-2,1)
|
||||
NULL
|
||||
Warnings:
|
||||
Error 1365 Division by 0
|
||||
set sql_mode='';
|
||||
|
@ -117,3 +117,15 @@ select rand(i) from t1;
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug #13820 (No warning on log(negative)
|
||||
#
|
||||
set sql_mode='traditional';
|
||||
select ln(-1);
|
||||
select log10(-1);
|
||||
select log2(-1);
|
||||
select log(2,-1);
|
||||
select log(-2,1);
|
||||
set sql_mode='';
|
||||
|
||||
|
@ -1386,8 +1386,13 @@ double Item_func_ln::val_real()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
double value= args[0]->val_real();
|
||||
if ((null_value=(args[0]->null_value || value <= 0.0)))
|
||||
if ((null_value=args[0]->null_value))
|
||||
return 0.0;
|
||||
if ((null_value= value <=0.0))
|
||||
{
|
||||
signal_divide_by_null();
|
||||
return 0.0;
|
||||
}
|
||||
return log(value);
|
||||
}
|
||||
|
||||
@ -1400,13 +1405,23 @@ double Item_func_log::val_real()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
double value= args[0]->val_real();
|
||||
if ((null_value=(args[0]->null_value || value <= 0.0)))
|
||||
if ((null_value=args[0]->null_value))
|
||||
return 0.0;
|
||||
if ((null_value= value <=0.0))
|
||||
{
|
||||
signal_divide_by_null();
|
||||
return 0.0;
|
||||
}
|
||||
if (arg_count == 2)
|
||||
{
|
||||
double value2= args[1]->val_real();
|
||||
if ((null_value=(args[1]->null_value || value2 <= 0.0 || value == 1.0)))
|
||||
if ((null_value=args[1]->null_value))
|
||||
return 0.0;
|
||||
if ((null_value= value2 <=0.0) || (value == 1.0))
|
||||
{
|
||||
signal_divide_by_null();
|
||||
return 0.0;
|
||||
}
|
||||
return log(value2) / log(value);
|
||||
}
|
||||
return log(value);
|
||||
@ -1416,8 +1431,14 @@ double Item_func_log2::val_real()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
double value= args[0]->val_real();
|
||||
if ((null_value=(args[0]->null_value || value <= 0.0)))
|
||||
|
||||
if ((null_value=args[0]->null_value))
|
||||
return 0.0;
|
||||
if ((null_value= value <=0.0))
|
||||
{
|
||||
signal_divide_by_null();
|
||||
return 0.0;
|
||||
}
|
||||
return log(value) / M_LN2;
|
||||
}
|
||||
|
||||
@ -1425,8 +1446,13 @@ double Item_func_log10::val_real()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
double value= args[0]->val_real();
|
||||
if ((null_value=(args[0]->null_value || value <= 0.0)))
|
||||
return 0.0; /* purecov: inspected */
|
||||
if ((null_value=args[0]->null_value))
|
||||
return 0.0;
|
||||
if ((null_value= value <=0.0))
|
||||
{
|
||||
signal_divide_by_null();
|
||||
return 0.0;
|
||||
}
|
||||
return log10(value);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user