diff options
author | Alexander Barkov <bar@mariadb.com> | 2018-12-26 12:10:50 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2018-12-26 12:10:50 +0400 |
commit | d89d12e3b723ba7a5113b3cdffd1d4a48127ff0a (patch) | |
tree | 307f208284919808f4d2784b8d41d7b7beee2024 /sql/item_func.cc | |
parent | 812bb1303c4a012edb8de9f6ad4c1d97d29533f6 (diff) | |
download | mariadb-git-d89d12e3b723ba7a5113b3cdffd1d4a48127ff0a.tar.gz |
MDEV-17759 Assertion `precision > 0' failed in decimal_bin_size upon CREATE TABLE .. SELECT
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r-- | sql/item_func.cc | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index f902191d9cf..3b9dfc9d97a 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1752,13 +1752,9 @@ longlong Item_func_int_div::val_int() bool Item_func_int_div::fix_length_and_dec() { - Item_result argtype= args[0]->result_type(); - /* use precision ony for the data type it is applicable for and valid */ - uint32 char_length= args[0]->max_char_length() - - (argtype == DECIMAL_RESULT || argtype == INT_RESULT ? - args[0]->decimals : 0); - fix_char_length(char_length > MY_INT64_NUM_DECIMAL_DIGITS ? - MY_INT64_NUM_DECIMAL_DIGITS : char_length); + uint32 prec= args[0]->decimal_int_part(); + set_if_smaller(prec, MY_INT64_NUM_DECIMAL_DIGITS); + fix_char_length(prec); maybe_null=1; unsigned_flag=args[0]->unsigned_flag | args[1]->unsigned_flag; return false; |