mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 03:17:20 +02:00
Fix for bug #26788 "mysqld (debug) aborts when inserting specific
numbers into char fields" and bug #12860 "Difference in zero padding of exponent between Unix and Windows" Rewrote the code that determines what 'precision' argument should be passed to sprintf() to fit the string representation of the input number into the field. We get finer control over conversion by pre-calculating the exponent, so we are able to determine which conversion format, 'e' or 'f', will be used by sprintf(). We also remove the leading zero from the exponent on Windows to make it compatible with the sprintf() output on other platforms. mysql-test/r/insert.result: Added test cases for bug #26788 and bug #31152. mysql-test/t/cast.test: Removed --replace_result, since the result is now correct on Windows. mysql-test/t/insert.test: Added test cases for bug #26788 and bug #31152. mysql-test/t/type_float.test: Removed --replace_result, since the result is now correct on Windows. mysql-test/t/variables.test: Removed --replace_result, since the result is now correct on Windows. sql/field.cc: Rewrote the code that determines what 'precision' argument should be passed to sprintf() to fit the string representation of the input number into the field. We get finer control over conversion by pre-calculating the exponent, so we are able to determine which conversion format, 'e' or 'f', will be used by sprintf().
This commit is contained in:
parent
bc8d42f96d
commit
1615f83804
6 changed files with 262 additions and 24 deletions
|
|
@ -353,5 +353,86 @@ SELECT * FROM t2;
|
|||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug #26788: mysqld (debug) aborts when inserting specific numbers into char
|
||||
# fields
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a char(20) NOT NULL,
|
||||
b char(7) DEFAULT NULL,
|
||||
c char(4) DEFAULT NULL
|
||||
);
|
||||
|
||||
INSERT INTO t1(a,b,c) VALUES (9.999999e+0, 9.999999e+0, 9.999e+0);
|
||||
INSERT INTO t1(a,b,c) VALUES (1.225e-05, 1.225e-05, 1.225e-05);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e-04, 1.225e-04);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e-01, 1.225e-01);
|
||||
INSERT INTO t1(a,b) VALUES (1.225877e-01, 1.225877e-01);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+01, 1.225e+01);
|
||||
INSERT INTO t1(a,b,c) VALUES (1.225e+01, 1.225e+01, 1.225e+01);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+05, 1.225e+05);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+10, 1.225e+10);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+15, 1.225e+15);
|
||||
INSERT INTO t1(a,b) VALUES (5000000e+0, 5000000e+0);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e+78, 1.25e+78);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e-94, 1.25e-94);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e+203, 1.25e+203);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e-175, 1.25e-175);
|
||||
INSERT INTO t1(a,c) VALUES (1.225e+0, 1.225e+0);
|
||||
INSERT INTO t1(a,c) VALUES (1.37e+0, 1.37e+0);
|
||||
INSERT INTO t1(a,c) VALUES (-1.37e+0, -1.37e+0);
|
||||
INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
|
||||
INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
|
||||
INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
|
||||
INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a char(20) NOT NULL,
|
||||
b char(7) DEFAULT NULL,
|
||||
c char(5)
|
||||
);
|
||||
|
||||
|
||||
INSERT INTO t1(a,b,c) VALUES (9.999999e+0, 9.999999e+0, 9.999e+0);
|
||||
INSERT INTO t1(a,b,c) VALUES (1.225e-05, 1.225e-05, 1.225e-05);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e-04, 1.225e-04);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e-01, 1.225e-01);
|
||||
INSERT INTO t1(a,b) VALUES (1.225877e-01, 1.225877e-01);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+01, 1.225e+01);
|
||||
INSERT INTO t1(a,b,c) VALUES (1.225e+01, 1.225e+01, 1.225e+01);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+05, 1.225e+05);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+10, 1.225e+10);
|
||||
INSERT INTO t1(a,b) VALUES (1.225e+15, 1.225e+15);
|
||||
INSERT INTO t1(a,b) VALUES (5000000e+0, 5000000e+0);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e+78, 1.25e+78);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e-94, 1.25e-94);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e+203, 1.25e+203);
|
||||
INSERT INTO t1(a,b) VALUES (1.25e-175, 1.25e-175);
|
||||
INSERT INTO t1(a,c) VALUES (1.225e+0, 1.225e+0);
|
||||
INSERT INTO t1(a,c) VALUES (1.37e+0, 1.37e+0);
|
||||
INSERT INTO t1(a,c) VALUES (-1.37e+0, -1.37e+0);
|
||||
INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
|
||||
INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
|
||||
INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
|
||||
INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #31152: assertion in Field_str::store(double)
|
||||
#
|
||||
|
||||
CREATE TABLE t (a CHAR(10),b INT);
|
||||
INSERT INTO t VALUES (),(),();
|
||||
INSERT INTO t(a) SELECT rand() FROM t;
|
||||
DROP TABLE t;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue