Commit e579fe3e authored by unknown's avatar unknown
Browse files

Merge deer.(none):/home/hf/work/mysql-5.0.13820

into deer.(none):/home/hf/work/mysql-5.0.12267


sql/item_func.cc:
  Auto merged
parents 57982bcc 1f6bc655
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -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='';
+12 −0
Original line number Diff line number Diff line
@@ -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='';
+32 −6
Original line number Diff line number Diff line
@@ -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);
}