diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index 9cb1e4a56d6..80b15d1d3c8 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -137,3 +137,6 @@ select * from t1; round(1, 6) 1.000000 drop table t1; +select abs(-2) * -2; +abs(-2) * -2 +-4 diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test index 4c24dae8c5d..11af874380e 100644 --- a/mysql-test/t/func_math.test +++ b/mysql-test/t/func_math.test @@ -71,3 +71,8 @@ create table t1 select round(1, 6); show create table t1; select * from t1; drop table t1; + +# +# Bug #11402: abs() forces rest of calculation to unsigned +# +select abs(-2) * -2; diff --git a/sql/item_func.cc b/sql/item_func.cc index 442ef15bba8..657eb374c6f 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -914,10 +914,7 @@ void Item_func_abs::fix_length_and_dec() max_length=args[0]->max_length; hybrid_type= REAL_RESULT; if (args[0]->result_type() == INT_RESULT) - { hybrid_type= INT_RESULT; - unsigned_flag= 1; - } }