Loading mysql-test/r/func_math.result +27 −0 Original line number Diff line number Diff line Loading @@ -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=''; mysql-test/t/func_math.test +12 −0 Original line number Diff line number Diff line Loading @@ -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=''; sql/item_func.cc +32 −6 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); Loading @@ -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; } Loading @@ -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 Loading
mysql-test/r/func_math.result +27 −0 Original line number Diff line number Diff line Loading @@ -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='';
mysql-test/t/func_math.test +12 −0 Original line number Diff line number Diff line Loading @@ -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='';
sql/item_func.cc +32 −6 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); Loading @@ -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; } Loading @@ -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