Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
00f964ab
Commit
00f964ab
authored
Aug 03, 2020
by
Alexander Barkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-23367 ROUND(18446744073709551615,-1) returns a wrong result
This problem was fixed by MDEV-23368. Adding tests only.
parent
3b87a681
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
423 additions
and
0 deletions
+423
-0
mysql-test/main/type_int.result
mysql-test/main/type_int.result
+360
-0
mysql-test/main/type_int.test
mysql-test/main/type_int.test
+63
-0
No files found.
mysql-test/main/type_int.result
View file @
00f964ab
...
...
@@ -966,5 +966,365 @@ ROUND(18446744073709551615,-10) ROUND(18446744073709551615,-11)
18446744070000000000 18446744100000000000
DROP TABLE t1;
#
# MDEV-23367 ROUND(18446744073709551615,-1) returns a wrong result
#
SELECT
ROUND(18446744073709551615,-1) AS c01,
ROUND(18446744073709551615,-19) AS c19;
c01 18446744073709551620
c19 20000000000000000000
CREATE OR REPLACE TABLE t1 AS
SELECT
ROUND(18446744073709551615,-1) AS c01,
ROUND(18446744073709551615,-19) AS c19;
SELECT * FROM t1;
c01 18446744073709551620
c19 20000000000000000000
SHOW CREATE TABLE t1;
Table t1
Create Table CREATE TABLE `t1` (
`c01` decimal(21,0) unsigned NOT NULL,
`c19` decimal(21,0) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
CREATE PROCEDURE p1(t VARCHAR(64))
BEGIN
SELECT t AS ``;
EXECUTE IMMEDIATE REPLACE('CREATE TABLE t1 (a TYPE)', 'TYPE', t);
INSERT IGNORE INTO t1 VALUES (-100000000000000000000000000000);
INSERT IGNORE INTO t1 VALUES (100000000000000000000000000000);
CREATE TABLE t2 AS SELECT
a, ROUND(a,-1), ROUND(a,-2), ROUND(a,-19), ROUND(a,-20), ROUND(a,-30)
FROM t1
ORDER BY a;
SHOW CREATE TABLE t2;
SELECT * FROM t2;
DROP TABLE t1, t2;
END;
$$
CALL p1('tinyint');
tinyint
Table t2
Create Table CREATE TABLE `t2` (
`a` tinyint(4) DEFAULT NULL,
`ROUND(a,-1)` int(5) DEFAULT NULL,
`ROUND(a,-2)` int(5) DEFAULT NULL,
`ROUND(a,-19)` int(5) DEFAULT NULL,
`ROUND(a,-20)` int(5) DEFAULT NULL,
`ROUND(a,-30)` int(5) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -128
ROUND(a,-1) -130
ROUND(a,-2) -100
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 127
ROUND(a,-1) 130
ROUND(a,-2) 100
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('smallint');
smallint
Table t2
Create Table CREATE TABLE `t2` (
`a` smallint(6) DEFAULT NULL,
`ROUND(a,-1)` int(7) DEFAULT NULL,
`ROUND(a,-2)` int(7) DEFAULT NULL,
`ROUND(a,-19)` int(7) DEFAULT NULL,
`ROUND(a,-20)` int(7) DEFAULT NULL,
`ROUND(a,-30)` int(7) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -32768
ROUND(a,-1) -32770
ROUND(a,-2) -32800
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 32767
ROUND(a,-1) 32770
ROUND(a,-2) 32800
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('mediumint');
mediumint
Table t2
Create Table CREATE TABLE `t2` (
`a` mediumint(9) DEFAULT NULL,
`ROUND(a,-1)` bigint(10) DEFAULT NULL,
`ROUND(a,-2)` bigint(10) DEFAULT NULL,
`ROUND(a,-19)` bigint(10) DEFAULT NULL,
`ROUND(a,-20)` bigint(10) DEFAULT NULL,
`ROUND(a,-30)` bigint(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -8388608
ROUND(a,-1) -8388610
ROUND(a,-2) -8388600
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 8388607
ROUND(a,-1) 8388610
ROUND(a,-2) 8388600
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('int');
int
Table t2
Create Table CREATE TABLE `t2` (
`a` int(11) DEFAULT NULL,
`ROUND(a,-1)` bigint(12) DEFAULT NULL,
`ROUND(a,-2)` bigint(12) DEFAULT NULL,
`ROUND(a,-19)` bigint(12) DEFAULT NULL,
`ROUND(a,-20)` bigint(12) DEFAULT NULL,
`ROUND(a,-30)` bigint(12) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -2147483648
ROUND(a,-1) -2147483650
ROUND(a,-2) -2147483600
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 2147483647
ROUND(a,-1) 2147483650
ROUND(a,-2) 2147483600
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('bigint');
bigint
Table t2
Create Table CREATE TABLE `t2` (
`a` bigint(20) DEFAULT NULL,
`ROUND(a,-1)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-2)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-19)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-20)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-30)` decimal(20,0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -9223372036854775808
ROUND(a,-1) -9223372036854775810
ROUND(a,-2) -9223372036854775800
ROUND(a,-19) -10000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
a 9223372036854775807
ROUND(a,-1) 9223372036854775810
ROUND(a,-2) 9223372036854775800
ROUND(a,-19) 10000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('bigint(20)');
bigint(20)
Table t2
Create Table CREATE TABLE `t2` (
`a` bigint(20) DEFAULT NULL,
`ROUND(a,-1)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-2)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-19)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-20)` decimal(20,0) DEFAULT NULL,
`ROUND(a,-30)` decimal(20,0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -9223372036854775808
ROUND(a,-1) -9223372036854775810
ROUND(a,-2) -9223372036854775800
ROUND(a,-19) -10000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
a 9223372036854775807
ROUND(a,-1) 9223372036854775810
ROUND(a,-2) 9223372036854775800
ROUND(a,-19) 10000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('bigint(21)');
bigint(21)
Table t2
Create Table CREATE TABLE `t2` (
`a` bigint(21) DEFAULT NULL,
`ROUND(a,-1)` decimal(21,0) DEFAULT NULL,
`ROUND(a,-2)` decimal(21,0) DEFAULT NULL,
`ROUND(a,-19)` decimal(21,0) DEFAULT NULL,
`ROUND(a,-20)` decimal(21,0) DEFAULT NULL,
`ROUND(a,-30)` decimal(21,0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -9223372036854775808
ROUND(a,-1) -9223372036854775810
ROUND(a,-2) -9223372036854775800
ROUND(a,-19) -10000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
a 9223372036854775807
ROUND(a,-1) 9223372036854775810
ROUND(a,-2) 9223372036854775800
ROUND(a,-19) 10000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('tinyint unsigned');
tinyint unsigned
Table t2
Create Table CREATE TABLE `t2` (
`a` tinyint(3) unsigned DEFAULT NULL,
`ROUND(a,-1)` int(4) unsigned DEFAULT NULL,
`ROUND(a,-2)` int(4) unsigned DEFAULT NULL,
`ROUND(a,-19)` int(4) unsigned DEFAULT NULL,
`ROUND(a,-20)` int(4) unsigned DEFAULT NULL,
`ROUND(a,-30)` int(4) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0
ROUND(a,-1) 0
ROUND(a,-2) 0
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 255
ROUND(a,-1) 260
ROUND(a,-2) 300
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('smallint unsigned');
smallint unsigned
Table t2
Create Table CREATE TABLE `t2` (
`a` smallint(5) unsigned DEFAULT NULL,
`ROUND(a,-1)` int(6) unsigned DEFAULT NULL,
`ROUND(a,-2)` int(6) unsigned DEFAULT NULL,
`ROUND(a,-19)` int(6) unsigned DEFAULT NULL,
`ROUND(a,-20)` int(6) unsigned DEFAULT NULL,
`ROUND(a,-30)` int(6) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0
ROUND(a,-1) 0
ROUND(a,-2) 0
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 65535
ROUND(a,-1) 65540
ROUND(a,-2) 65500
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('mediumint unsigned');
mediumint unsigned
Table t2
Create Table CREATE TABLE `t2` (
`a` mediumint(8) unsigned DEFAULT NULL,
`ROUND(a,-1)` int(9) unsigned DEFAULT NULL,
`ROUND(a,-2)` int(9) unsigned DEFAULT NULL,
`ROUND(a,-19)` int(9) unsigned DEFAULT NULL,
`ROUND(a,-20)` int(9) unsigned DEFAULT NULL,
`ROUND(a,-30)` int(9) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0
ROUND(a,-1) 0
ROUND(a,-2) 0
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 16777215
ROUND(a,-1) 16777220
ROUND(a,-2) 16777200
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('int unsigned');
int unsigned
Table t2
Create Table CREATE TABLE `t2` (
`a` int(10) unsigned DEFAULT NULL,
`ROUND(a,-1)` bigint(11) unsigned DEFAULT NULL,
`ROUND(a,-2)` bigint(11) unsigned DEFAULT NULL,
`ROUND(a,-19)` bigint(11) unsigned DEFAULT NULL,
`ROUND(a,-20)` bigint(11) unsigned DEFAULT NULL,
`ROUND(a,-30)` bigint(11) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0
ROUND(a,-1) 0
ROUND(a,-2) 0
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 4294967295
ROUND(a,-1) 4294967300
ROUND(a,-2) 4294967300
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('bigint unsigned');
bigint unsigned
Table t2
Create Table CREATE TABLE `t2` (
`a` bigint(20) unsigned DEFAULT NULL,
`ROUND(a,-1)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-2)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-19)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-20)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-30)` decimal(21,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0
ROUND(a,-1) 0
ROUND(a,-2) 0
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 18446744073709551615
ROUND(a,-1) 18446744073709551620
ROUND(a,-2) 18446744073709551600
ROUND(a,-19) 20000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('bigint(20) unsigned');
bigint(20) unsigned
Table t2
Create Table CREATE TABLE `t2` (
`a` bigint(20) unsigned DEFAULT NULL,
`ROUND(a,-1)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-2)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-19)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-20)` decimal(21,0) unsigned DEFAULT NULL,
`ROUND(a,-30)` decimal(21,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0
ROUND(a,-1) 0
ROUND(a,-2) 0
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 18446744073709551615
ROUND(a,-1) 18446744073709551620
ROUND(a,-2) 18446744073709551600
ROUND(a,-19) 20000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
CALL p1('bigint(21) unsigned');
bigint(21) unsigned
Table t2
Create Table CREATE TABLE `t2` (
`a` bigint(21) unsigned DEFAULT NULL,
`ROUND(a,-1)` decimal(22,0) unsigned DEFAULT NULL,
`ROUND(a,-2)` decimal(22,0) unsigned DEFAULT NULL,
`ROUND(a,-19)` decimal(22,0) unsigned DEFAULT NULL,
`ROUND(a,-20)` decimal(22,0) unsigned DEFAULT NULL,
`ROUND(a,-30)` decimal(22,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0
ROUND(a,-1) 0
ROUND(a,-2) 0
ROUND(a,-19) 0
ROUND(a,-20) 0
ROUND(a,-30) 0
a 18446744073709551615
ROUND(a,-1) 18446744073709551620
ROUND(a,-2) 18446744073709551600
ROUND(a,-19) 20000000000000000000
ROUND(a,-20) 0
ROUND(a,-30) 0
DROP PROCEDURE p1;
#
# End of 10.4 tests
#
mysql-test/main/type_int.test
View file @
00f964ab
...
...
@@ -349,6 +349,69 @@ SHOW CREATE TABLE t1;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# MDEV-23367 ROUND(18446744073709551615,-1) returns a wrong result
--
echo
#
--
vertical_results
SELECT
ROUND
(
18446744073709551615
,
-
1
)
AS
c01
,
ROUND
(
18446744073709551615
,
-
19
)
AS
c19
;
CREATE
OR
REPLACE
TABLE
t1
AS
SELECT
ROUND
(
18446744073709551615
,
-
1
)
AS
c01
,
ROUND
(
18446744073709551615
,
-
19
)
AS
c19
;
SELECT
*
FROM
t1
;
SHOW
CREATE
TABLE
t1
;
DROP
TABLE
t1
;
--
horizontal_results
DELIMITER
$$
;
CREATE
PROCEDURE
p1
(
t
VARCHAR
(
64
))
BEGIN
SELECT
t
AS
``
;
EXECUTE
IMMEDIATE
REPLACE
(
'CREATE TABLE t1 (a TYPE)'
,
'TYPE'
,
t
);
INSERT
IGNORE
INTO
t1
VALUES
(
-
100000000000000000000000000000
);
INSERT
IGNORE
INTO
t1
VALUES
(
100000000000000000000000000000
);
CREATE
TABLE
t2
AS
SELECT
a
,
ROUND
(
a
,
-
1
),
ROUND
(
a
,
-
2
),
ROUND
(
a
,
-
19
),
ROUND
(
a
,
-
20
),
ROUND
(
a
,
-
30
)
FROM
t1
ORDER
BY
a
;
SHOW
CREATE
TABLE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t1
,
t2
;
END
;
$$
DELIMITER
;
$$
--
vertical_results
CALL
p1
(
'tinyint'
);
CALL
p1
(
'smallint'
);
CALL
p1
(
'mediumint'
);
CALL
p1
(
'int'
);
CALL
p1
(
'bigint'
);
CALL
p1
(
'bigint(20)'
);
CALL
p1
(
'bigint(21)'
);
#CALL p1('bigint(22)');
#CALL p1('bigint(23)');
#CALL p1('bigint(30)');
CALL
p1
(
'tinyint unsigned'
);
CALL
p1
(
'smallint unsigned'
);
CALL
p1
(
'mediumint unsigned'
);
CALL
p1
(
'int unsigned'
);
CALL
p1
(
'bigint unsigned'
);
CALL
p1
(
'bigint(20) unsigned'
);
CALL
p1
(
'bigint(21) unsigned'
);
#CALL p1('bigint(22) unsigned');
#CALL p1('bigint(23) unsigned');
#CALL p1('bigint(30) unsigned');
--
horizontal_results
DROP
PROCEDURE
p1
;
--
echo
#
--
echo
# End of 10.4 tests
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment