diff options
-rw-r--r-- | mysql-test/r/func_math.result | 6 | ||||
-rw-r--r-- | mysql-test/t/func_math.test | 6 | ||||
-rw-r--r-- | sql/item_func.cc | 3 |
3 files changed, 15 insertions, 0 deletions
diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index ac24ef4dea9..c93e33f98b9 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -543,6 +543,12 @@ ROUND(LEAST(15, -4939092, 0.2704), STDDEV('a')) -4939092.0000 Warnings: Warning 1292 Truncated incorrect DOUBLE value: 'a' +# +# Bug#12392636 ASSERTION FAILED: SCALE >= 0 && PRECISION > 0 && SCALE <= PRECISION +# +SELECT SUM(DISTINCT (TRUNCATE((.1), NULL))); +SUM(DISTINCT (TRUNCATE((.1), NULL))) +NULL End of 5.1 tests # # Bug #8433: Overflow must be an error diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test index 0e704fecf57..0d59f98a313 100644 --- a/mysql-test/t/func_math.test +++ b/mysql-test/t/func_math.test @@ -370,6 +370,12 @@ DROP TABLE t1; SELECT ROUND(LEAST(15, -4939092, 0.2704), STDDEV('a')); +--echo # +--echo # Bug#12392636 ASSERTION FAILED: SCALE >= 0 && PRECISION > 0 && SCALE <= PRECISION +--echo # + +SELECT SUM(DISTINCT (TRUNCATE((.1), NULL))); + --echo End of 5.1 tests --echo # diff --git a/sql/item_func.cc b/sql/item_func.cc index d0def6abccb..754eae6d55b 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2259,6 +2259,9 @@ void Item_func_round::fix_length_and_dec() } val1= args[1]->val_int(); + if ((null_value= args[1]->is_null())) + return; + val1_unsigned= args[1]->unsigned_flag; if (val1 < 0) decimals_to_set= val1_unsigned ? INT_MAX : 0; |