mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
Bug#11764994 57900: CREATE TABLE .. SELECT ASSERTS SCALE >= 0 && PRECISION > 0 && SCALE <= PR
Assert fails due to overflow which happens in Item_func_int_val::fix_num_length_and_dec() as geometry functions have max_length value equal to max_field_size(4294967295U). The fix is to skip max_length calculation for some boundary cases.
This commit is contained in:
parent
b6c56f465c
commit
86c1225699
3 changed files with 20 additions and 3 deletions
|
@ -511,4 +511,11 @@ t1 CREATE TABLE `t1` (
|
||||||
`C` varchar(23) DEFAULT NULL
|
`C` varchar(23) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#11764994 57900: CREATE TABLE .. SELECT ASSERTS SCALE >= 0 && PRECISION > 0 && SCALE <= PR
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 SELECT CEIL(LINESTRINGFROMWKB(1) DIV NULL);
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 SELECT FLOOR(LINESTRINGFROMWKB(1) DIV NULL);
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
|
|
@ -324,4 +324,13 @@ CREATE TABLE t1 SELECT CAST((CASE(('')) WHEN (CONVERT(1, CHAR(1))) THEN (('' / 1
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#11764994 57900: CREATE TABLE .. SELECT ASSERTS SCALE >= 0 && PRECISION > 0 && SCALE <= PR
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 SELECT CEIL(LINESTRINGFROMWKB(1) DIV NULL);
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 SELECT FLOOR(LINESTRINGFROMWKB(1) DIV NULL);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
|
@ -1803,9 +1803,10 @@ void Item_func_integer::fix_length_and_dec()
|
||||||
|
|
||||||
void Item_func_int_val::fix_num_length_and_dec()
|
void Item_func_int_val::fix_num_length_and_dec()
|
||||||
{
|
{
|
||||||
max_length= args[0]->max_length - (args[0]->decimals ?
|
ulonglong tmp_max_length= (ulonglong ) args[0]->max_length -
|
||||||
args[0]->decimals + 1 :
|
(args[0]->decimals ? args[0]->decimals + 1 : 0) + 2;
|
||||||
0) + 2;
|
max_length= tmp_max_length > (ulonglong) max_field_size ?
|
||||||
|
max_field_size : (uint32) tmp_max_length;
|
||||||
uint tmp= float_length(decimals);
|
uint tmp= float_length(decimals);
|
||||||
set_if_smaller(max_length,tmp);
|
set_if_smaller(max_length,tmp);
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue