Merge 10.4 into 10.5

This commit is contained in:
Marko Mäkelä 2020-08-10 21:38:55 +03:00
commit 1c58748196
64 changed files with 1622 additions and 466 deletions

View File

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2012, Oracle and/or its affiliates.
Copyright (c) 2012, 2017, MariaDB Corporation.
Copyright (c) 2012, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -278,6 +278,7 @@ struct st_vio
#ifdef _WIN32
HANDLE hPipe;
OVERLAPPED overlapped;
int shutdown_flag;
#endif
};
#endif /* vio_violite_h_ */

View File

@ -194,12 +194,12 @@ show create table t1;
drop table t1;
select hex(concat(ceiling(0.5)));
create table t1 as select concat(ceiling(0.5)) as c1;
create table t1 as select ceiling(0.5) as c0, concat(ceiling(0.5)) as c1;
show create table t1;
drop table t1;
select hex(concat(floor(0.5)));
create table t1 as select concat(floor(0.5)) as c1;
create table t1 as select floor(0.5) as c0, concat(floor(0.5)) as c1;
show create table t1;
drop table t1;

View File

@ -345,21 +345,23 @@ drop table t1;
select hex(concat(ceiling(0.5)));
hex(concat(ceiling(0.5)))
31
create table t1 as select concat(ceiling(0.5)) as c1;
create table t1 as select ceiling(0.5) as c0, concat(ceiling(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varbinary(4) DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varbinary(3) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(floor(0.5)));
hex(concat(floor(0.5)))
30
create table t1 as select concat(floor(0.5)) as c1;
create table t1 as select floor(0.5) as c0, concat(floor(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varbinary(4) DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varbinary(3) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(round(0.5)));

View File

@ -757,21 +757,23 @@ drop table t1;
select hex(concat(ceiling(0.5)));
hex(concat(ceiling(0.5)))
31
create table t1 as select concat(ceiling(0.5)) as c1;
create table t1 as select ceiling(0.5) as c0, concat(ceiling(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) CHARACTER SET cp1251 DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) CHARACTER SET cp1251 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(floor(0.5)));
hex(concat(floor(0.5)))
30
create table t1 as select concat(floor(0.5)) as c1;
create table t1 as select floor(0.5) as c0, concat(floor(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) CHARACTER SET cp1251 DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) CHARACTER SET cp1251 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(round(0.5)));

View File

@ -22,6 +22,13 @@ SELECT @a:=CONVERT('aя' USING filename) AS `@a`, BINARY @a, REVERSE(@a), HEX(@a
@a BINARY @a REVERSE(@a) HEX(@a) HEX(REVERSE(@a))
aя a@r1 яa 61407231 40723161
#
# MDEV-22022 Various mangled SQL statements will crash 10.3 to 10.5 debug builds
#
SET CHARACTER_SET_CLIENT=17;
SELECT doc.`Children`.0 FROM t1;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?Children??0?FROM?t1' at line 1
SET NAMES latin1;
#
# Start of 10.5 tests
#
#

View File

@ -29,6 +29,16 @@ SET NAMES utf8;
SELECT @a:=CONVERT('aя' USING filename) AS `@a`, BINARY @a, REVERSE(@a), HEX(@a), HEX(REVERSE(@a));
--echo #
--echo # MDEV-22022 Various mangled SQL statements will crash 10.3 to 10.5 debug builds
--echo #
SET CHARACTER_SET_CLIENT=17;
--error ER_PARSE_ERROR
SELECT doc.`Children`.0 FROM t1;
SET NAMES latin1;
--echo #
--echo # Start of 10.5 tests
--echo #

View File

@ -1066,21 +1066,23 @@ drop table t1;
select hex(concat(ceiling(0.5)));
hex(concat(ceiling(0.5)))
31
create table t1 as select concat(ceiling(0.5)) as c1;
create table t1 as select ceiling(0.5) as c0, concat(ceiling(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(floor(0.5)));
hex(concat(floor(0.5)))
30
create table t1 as select concat(floor(0.5)) as c1;
create table t1 as select floor(0.5) as c0, concat(floor(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(round(0.5)));

View File

@ -1950,21 +1950,23 @@ drop table t1;
select hex(concat(ceiling(0.5)));
hex(concat(ceiling(0.5)))
0031
create table t1 as select concat(ceiling(0.5)) as c1;
create table t1 as select ceiling(0.5) as c0, concat(ceiling(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) CHARACTER SET ucs2 DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) CHARACTER SET ucs2 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(floor(0.5)));
hex(concat(floor(0.5)))
0030
create table t1 as select concat(floor(0.5)) as c1;
create table t1 as select floor(0.5) as c0, concat(floor(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) CHARACTER SET ucs2 DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) CHARACTER SET ucs2 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(round(0.5)));

View File

@ -2817,21 +2817,23 @@ drop table t1;
select hex(concat(ceiling(0.5)));
hex(concat(ceiling(0.5)))
31
create table t1 as select concat(ceiling(0.5)) as c1;
create table t1 as select ceiling(0.5) as c0, concat(ceiling(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) CHARACTER SET utf8 DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(floor(0.5)));
hex(concat(floor(0.5)))
30
create table t1 as select concat(floor(0.5)) as c1;
create table t1 as select floor(0.5) as c0, concat(floor(0.5)) as c1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(4) CHARACTER SET utf8 DEFAULT NULL
`c0` int(3) NOT NULL,
`c1` varchar(3) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select hex(concat(round(0.5)));

View File

@ -1080,7 +1080,7 @@ Create Table CREATE TABLE `t2` (
`a` decimal(38,0) DEFAULT NULL,
`b` decimal(38,0) unsigned DEFAULT NULL,
`fa` decimal(38,0) DEFAULT NULL,
`fb` decimal(38,0) DEFAULT NULL
`fb` decimal(38,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999999999999999999
b 99999999999999999999999999999999999999
@ -1090,8 +1090,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,1) DEFAULT NULL,
`b` decimal(38,1) unsigned DEFAULT NULL,
`fa` decimal(37,0) DEFAULT NULL,
`fb` decimal(37,0) DEFAULT NULL
`fa` decimal(38,0) DEFAULT NULL,
`fb` decimal(37,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999999999999999999.9
b 9999999999999999999999999999999999999.9
@ -1101,8 +1101,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,2) DEFAULT NULL,
`b` decimal(38,2) unsigned DEFAULT NULL,
`fa` decimal(36,0) DEFAULT NULL,
`fb` decimal(36,0) DEFAULT NULL
`fa` decimal(37,0) DEFAULT NULL,
`fb` decimal(36,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999999999999999.99
b 999999999999999999999999999999999999.99
@ -1112,8 +1112,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,3) DEFAULT NULL,
`b` decimal(38,3) unsigned DEFAULT NULL,
`fa` decimal(35,0) DEFAULT NULL,
`fb` decimal(35,0) DEFAULT NULL
`fa` decimal(36,0) DEFAULT NULL,
`fb` decimal(35,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999999999999999.999
b 99999999999999999999999999999999999.999
@ -1123,8 +1123,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,4) DEFAULT NULL,
`b` decimal(38,4) unsigned DEFAULT NULL,
`fa` decimal(34,0) DEFAULT NULL,
`fb` decimal(34,0) DEFAULT NULL
`fa` decimal(35,0) DEFAULT NULL,
`fb` decimal(34,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999999999999999.9999
b 9999999999999999999999999999999999.9999
@ -1134,8 +1134,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,5) DEFAULT NULL,
`b` decimal(38,5) unsigned DEFAULT NULL,
`fa` decimal(33,0) DEFAULT NULL,
`fb` decimal(33,0) DEFAULT NULL
`fa` decimal(34,0) DEFAULT NULL,
`fb` decimal(33,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999999999999.99999
b 999999999999999999999999999999999.99999
@ -1145,8 +1145,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,6) DEFAULT NULL,
`b` decimal(38,6) unsigned DEFAULT NULL,
`fa` decimal(32,0) DEFAULT NULL,
`fb` decimal(32,0) DEFAULT NULL
`fa` decimal(33,0) DEFAULT NULL,
`fb` decimal(32,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999999999999.999999
b 99999999999999999999999999999999.999999
@ -1156,8 +1156,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,7) DEFAULT NULL,
`b` decimal(38,7) unsigned DEFAULT NULL,
`fa` decimal(31,0) DEFAULT NULL,
`fb` decimal(31,0) DEFAULT NULL
`fa` decimal(32,0) DEFAULT NULL,
`fb` decimal(31,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999999999999.9999999
b 9999999999999999999999999999999.9999999
@ -1167,8 +1167,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,8) DEFAULT NULL,
`b` decimal(38,8) unsigned DEFAULT NULL,
`fa` decimal(30,0) DEFAULT NULL,
`fb` decimal(30,0) DEFAULT NULL
`fa` decimal(31,0) DEFAULT NULL,
`fb` decimal(30,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999999999.99999999
b 999999999999999999999999999999.99999999
@ -1178,8 +1178,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,9) DEFAULT NULL,
`b` decimal(38,9) unsigned DEFAULT NULL,
`fa` decimal(29,0) DEFAULT NULL,
`fb` decimal(29,0) DEFAULT NULL
`fa` decimal(30,0) DEFAULT NULL,
`fb` decimal(29,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999999999.999999999
b 99999999999999999999999999999.999999999
@ -1189,8 +1189,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,10) DEFAULT NULL,
`b` decimal(38,10) unsigned DEFAULT NULL,
`fa` decimal(28,0) DEFAULT NULL,
`fb` decimal(28,0) DEFAULT NULL
`fa` decimal(29,0) DEFAULT NULL,
`fb` decimal(28,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999999999.9999999999
b 9999999999999999999999999999.9999999999
@ -1200,8 +1200,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,11) DEFAULT NULL,
`b` decimal(38,11) unsigned DEFAULT NULL,
`fa` decimal(27,0) DEFAULT NULL,
`fb` decimal(27,0) DEFAULT NULL
`fa` decimal(28,0) DEFAULT NULL,
`fb` decimal(27,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999999.99999999999
b 999999999999999999999999999.99999999999
@ -1211,8 +1211,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,12) DEFAULT NULL,
`b` decimal(38,12) unsigned DEFAULT NULL,
`fa` decimal(26,0) DEFAULT NULL,
`fb` decimal(26,0) DEFAULT NULL
`fa` decimal(27,0) DEFAULT NULL,
`fb` decimal(26,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999999.999999999999
b 99999999999999999999999999.999999999999
@ -1222,8 +1222,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,13) DEFAULT NULL,
`b` decimal(38,13) unsigned DEFAULT NULL,
`fa` decimal(25,0) DEFAULT NULL,
`fb` decimal(25,0) DEFAULT NULL
`fa` decimal(26,0) DEFAULT NULL,
`fb` decimal(25,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999999.9999999999999
b 9999999999999999999999999.9999999999999
@ -1233,8 +1233,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,14) DEFAULT NULL,
`b` decimal(38,14) unsigned DEFAULT NULL,
`fa` decimal(24,0) DEFAULT NULL,
`fb` decimal(24,0) DEFAULT NULL
`fa` decimal(25,0) DEFAULT NULL,
`fb` decimal(24,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999.99999999999999
b 999999999999999999999999.99999999999999
@ -1244,8 +1244,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,15) DEFAULT NULL,
`b` decimal(38,15) unsigned DEFAULT NULL,
`fa` decimal(23,0) DEFAULT NULL,
`fb` decimal(23,0) DEFAULT NULL
`fa` decimal(24,0) DEFAULT NULL,
`fb` decimal(23,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999.999999999999999
b 99999999999999999999999.999999999999999
@ -1255,8 +1255,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,16) DEFAULT NULL,
`b` decimal(38,16) unsigned DEFAULT NULL,
`fa` decimal(22,0) DEFAULT NULL,
`fb` decimal(22,0) DEFAULT NULL
`fa` decimal(23,0) DEFAULT NULL,
`fb` decimal(22,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999.9999999999999999
b 9999999999999999999999.9999999999999999
@ -1266,8 +1266,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,17) DEFAULT NULL,
`b` decimal(38,17) unsigned DEFAULT NULL,
`fa` decimal(21,0) DEFAULT NULL,
`fb` decimal(21,0) DEFAULT NULL
`fa` decimal(22,0) DEFAULT NULL,
`fb` decimal(21,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999.99999999999999999
b 999999999999999999999.99999999999999999
@ -1277,8 +1277,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,18) DEFAULT NULL,
`b` decimal(38,18) unsigned DEFAULT NULL,
`fa` decimal(20,0) DEFAULT NULL,
`fb` decimal(20,0) DEFAULT NULL
`fa` decimal(21,0) DEFAULT NULL,
`fb` decimal(20,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999.999999999999999999
b 99999999999999999999.999999999999999999
@ -1288,8 +1288,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,19) DEFAULT NULL,
`b` decimal(38,19) unsigned DEFAULT NULL,
`fa` decimal(19,0) DEFAULT NULL,
`fb` decimal(19,0) DEFAULT NULL
`fa` decimal(20,0) DEFAULT NULL,
`fb` decimal(19,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999.9999999999999999999
b 9999999999999999999.9999999999999999999
@ -1299,8 +1299,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,20) DEFAULT NULL,
`b` decimal(38,20) unsigned DEFAULT NULL,
`fa` decimal(18,0) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
`fa` decimal(19,0) DEFAULT NULL,
`fb` bigint(18) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999.99999999999999999999
b 999999999999999999.99999999999999999999
@ -1310,7 +1310,7 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,21) DEFAULT NULL,
`b` decimal(38,21) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fa` bigint(19) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999.999999999999999999999
@ -1321,8 +1321,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,22) DEFAULT NULL,
`b` decimal(38,22) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
`fa` bigint(18) DEFAULT NULL,
`fb` bigint(16) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999.9999999999999999999999
b 9999999999999999.9999999999999999999999
@ -1333,7 +1333,7 @@ Create Table CREATE TABLE `t2` (
`a` decimal(38,23) DEFAULT NULL,
`b` decimal(38,23) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
`fb` bigint(15) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999.99999999999999999999999
b 999999999999999.99999999999999999999999
@ -1343,8 +1343,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,24) DEFAULT NULL,
`b` decimal(38,24) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fb` bigint(16) unsigned DEFAULT NULL
`fa` bigint(16) DEFAULT NULL,
`fb` bigint(14) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999.999999999999999999999999
b 99999999999999.999999999999999999999999
@ -1354,8 +1354,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,25) DEFAULT NULL,
`b` decimal(38,25) unsigned DEFAULT NULL,
`fa` bigint(16) DEFAULT NULL,
`fb` bigint(15) unsigned DEFAULT NULL
`fa` bigint(15) DEFAULT NULL,
`fb` bigint(13) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999.9999999999999999999999999
b 9999999999999.9999999999999999999999999
@ -1365,8 +1365,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,26) DEFAULT NULL,
`b` decimal(38,26) unsigned DEFAULT NULL,
`fa` bigint(15) DEFAULT NULL,
`fb` bigint(14) unsigned DEFAULT NULL
`fa` bigint(14) DEFAULT NULL,
`fb` bigint(12) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999.99999999999999999999999999
b 999999999999.99999999999999999999999999
@ -1376,8 +1376,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,27) DEFAULT NULL,
`b` decimal(38,27) unsigned DEFAULT NULL,
`fa` bigint(14) DEFAULT NULL,
`fb` bigint(13) unsigned DEFAULT NULL
`fa` bigint(13) DEFAULT NULL,
`fb` bigint(11) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999.999999999999999999999999999
b 99999999999.999999999999999999999999999
@ -1387,8 +1387,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,28) DEFAULT NULL,
`b` decimal(38,28) unsigned DEFAULT NULL,
`fa` bigint(13) DEFAULT NULL,
`fb` bigint(12) unsigned DEFAULT NULL
`fa` bigint(12) DEFAULT NULL,
`fb` bigint(10) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999.9999999999999999999999999999
b 9999999999.9999999999999999999999999999
@ -1398,8 +1398,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,29) DEFAULT NULL,
`b` decimal(38,29) unsigned DEFAULT NULL,
`fa` bigint(12) DEFAULT NULL,
`fb` bigint(11) unsigned DEFAULT NULL
`fa` bigint(11) DEFAULT NULL,
`fb` int(9) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999.99999999999999999999999999999
b 999999999.99999999999999999999999999999
@ -1409,8 +1409,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,30) DEFAULT NULL,
`b` decimal(38,30) unsigned DEFAULT NULL,
`fa` bigint(11) DEFAULT NULL,
`fb` bigint(10) unsigned DEFAULT NULL
`fa` int(10) DEFAULT NULL,
`fb` int(8) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999.999999999999999999999999999999
b 99999999.999999999999999999999999999999
@ -1422,7 +1422,7 @@ Create Table CREATE TABLE `t2` (
`a` decimal(30,0) DEFAULT NULL,
`b` decimal(30,0) unsigned DEFAULT NULL,
`fa` decimal(30,0) DEFAULT NULL,
`fb` decimal(31,0) unsigned DEFAULT NULL
`fb` decimal(30,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999999999
b 999999999999999999999999999999
@ -1432,8 +1432,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,1) DEFAULT NULL,
`b` decimal(30,1) unsigned DEFAULT NULL,
`fa` decimal(29,0) DEFAULT NULL,
`fb` decimal(30,0) unsigned DEFAULT NULL
`fa` decimal(30,0) DEFAULT NULL,
`fb` decimal(29,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999999999.9
b 99999999999999999999999999999.9
@ -1443,8 +1443,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,2) DEFAULT NULL,
`b` decimal(30,2) unsigned DEFAULT NULL,
`fa` decimal(28,0) DEFAULT NULL,
`fb` decimal(29,0) unsigned DEFAULT NULL
`fa` decimal(29,0) DEFAULT NULL,
`fb` decimal(28,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999999999.99
b 9999999999999999999999999999.99
@ -1454,8 +1454,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,3) DEFAULT NULL,
`b` decimal(30,3) unsigned DEFAULT NULL,
`fa` decimal(27,0) DEFAULT NULL,
`fb` decimal(28,0) unsigned DEFAULT NULL
`fa` decimal(28,0) DEFAULT NULL,
`fb` decimal(27,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999999.999
b 999999999999999999999999999.999
@ -1465,8 +1465,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,4) DEFAULT NULL,
`b` decimal(30,4) unsigned DEFAULT NULL,
`fa` decimal(26,0) DEFAULT NULL,
`fb` decimal(27,0) unsigned DEFAULT NULL
`fa` decimal(27,0) DEFAULT NULL,
`fb` decimal(26,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999999.9999
b 99999999999999999999999999.9999
@ -1476,8 +1476,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,5) DEFAULT NULL,
`b` decimal(30,5) unsigned DEFAULT NULL,
`fa` decimal(25,0) DEFAULT NULL,
`fb` decimal(26,0) unsigned DEFAULT NULL
`fa` decimal(26,0) DEFAULT NULL,
`fb` decimal(25,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999999.99999
b 9999999999999999999999999.99999
@ -1487,8 +1487,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,6) DEFAULT NULL,
`b` decimal(30,6) unsigned DEFAULT NULL,
`fa` decimal(24,0) DEFAULT NULL,
`fb` decimal(25,0) unsigned DEFAULT NULL
`fa` decimal(25,0) DEFAULT NULL,
`fb` decimal(24,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999999.999999
b 999999999999999999999999.999999
@ -1498,8 +1498,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,7) DEFAULT NULL,
`b` decimal(30,7) unsigned DEFAULT NULL,
`fa` decimal(23,0) DEFAULT NULL,
`fb` decimal(24,0) unsigned DEFAULT NULL
`fa` decimal(24,0) DEFAULT NULL,
`fb` decimal(23,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999999.9999999
b 99999999999999999999999.9999999
@ -1509,8 +1509,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,8) DEFAULT NULL,
`b` decimal(30,8) unsigned DEFAULT NULL,
`fa` decimal(22,0) DEFAULT NULL,
`fb` decimal(23,0) unsigned DEFAULT NULL
`fa` decimal(23,0) DEFAULT NULL,
`fb` decimal(22,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999999.99999999
b 9999999999999999999999.99999999
@ -1520,8 +1520,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,9) DEFAULT NULL,
`b` decimal(30,9) unsigned DEFAULT NULL,
`fa` decimal(21,0) DEFAULT NULL,
`fb` decimal(22,0) unsigned DEFAULT NULL
`fa` decimal(22,0) DEFAULT NULL,
`fb` decimal(21,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999999.999999999
b 999999999999999999999.999999999
@ -1531,8 +1531,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,10) DEFAULT NULL,
`b` decimal(30,10) unsigned DEFAULT NULL,
`fa` decimal(20,0) DEFAULT NULL,
`fb` decimal(21,0) unsigned DEFAULT NULL
`fa` decimal(21,0) DEFAULT NULL,
`fb` decimal(20,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999999.9999999999
b 99999999999999999999.9999999999
@ -1542,8 +1542,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,11) DEFAULT NULL,
`b` decimal(30,11) unsigned DEFAULT NULL,
`fa` decimal(19,0) DEFAULT NULL,
`fb` decimal(20,0) unsigned DEFAULT NULL
`fa` decimal(20,0) DEFAULT NULL,
`fb` decimal(19,0) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999999.99999999999
b 9999999999999999999.99999999999
@ -1553,8 +1553,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,12) DEFAULT NULL,
`b` decimal(30,12) unsigned DEFAULT NULL,
`fa` decimal(18,0) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
`fa` decimal(19,0) DEFAULT NULL,
`fb` bigint(18) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999999.999999999999
b 999999999999999999.999999999999
@ -1564,7 +1564,7 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,13) DEFAULT NULL,
`b` decimal(30,13) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fa` bigint(19) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999999.9999999999999
@ -1575,8 +1575,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,14) DEFAULT NULL,
`b` decimal(30,14) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
`fa` bigint(18) DEFAULT NULL,
`fb` bigint(16) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999999.99999999999999
b 9999999999999999.99999999999999
@ -1587,7 +1587,7 @@ Create Table CREATE TABLE `t2` (
`a` decimal(30,15) DEFAULT NULL,
`b` decimal(30,15) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fb` bigint(17) unsigned DEFAULT NULL
`fb` bigint(15) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999999.999999999999999
b 999999999999999.999999999999999
@ -1597,8 +1597,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,16) DEFAULT NULL,
`b` decimal(30,16) unsigned DEFAULT NULL,
`fa` bigint(17) DEFAULT NULL,
`fb` bigint(16) unsigned DEFAULT NULL
`fa` bigint(16) DEFAULT NULL,
`fb` bigint(14) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999999.9999999999999999
b 99999999999999.9999999999999999
@ -1608,8 +1608,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,17) DEFAULT NULL,
`b` decimal(30,17) unsigned DEFAULT NULL,
`fa` bigint(16) DEFAULT NULL,
`fb` bigint(15) unsigned DEFAULT NULL
`fa` bigint(15) DEFAULT NULL,
`fb` bigint(13) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999999.99999999999999999
b 9999999999999.99999999999999999
@ -1619,8 +1619,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,18) DEFAULT NULL,
`b` decimal(30,18) unsigned DEFAULT NULL,
`fa` bigint(15) DEFAULT NULL,
`fb` bigint(14) unsigned DEFAULT NULL
`fa` bigint(14) DEFAULT NULL,
`fb` bigint(12) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999999.999999999999999999
b 999999999999.999999999999999999
@ -1630,8 +1630,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,19) DEFAULT NULL,
`b` decimal(30,19) unsigned DEFAULT NULL,
`fa` bigint(14) DEFAULT NULL,
`fb` bigint(13) unsigned DEFAULT NULL
`fa` bigint(13) DEFAULT NULL,
`fb` bigint(11) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999999.9999999999999999999
b 99999999999.9999999999999999999
@ -1641,8 +1641,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,20) DEFAULT NULL,
`b` decimal(30,20) unsigned DEFAULT NULL,
`fa` bigint(13) DEFAULT NULL,
`fb` bigint(12) unsigned DEFAULT NULL
`fa` bigint(12) DEFAULT NULL,
`fb` bigint(10) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999999.99999999999999999999
b 9999999999.99999999999999999999
@ -1652,8 +1652,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,21) DEFAULT NULL,
`b` decimal(30,21) unsigned DEFAULT NULL,
`fa` bigint(12) DEFAULT NULL,
`fb` bigint(11) unsigned DEFAULT NULL
`fa` bigint(11) DEFAULT NULL,
`fb` int(9) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999999.999999999999999999999
b 999999999.999999999999999999999
@ -1663,8 +1663,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,22) DEFAULT NULL,
`b` decimal(30,22) unsigned DEFAULT NULL,
`fa` bigint(11) DEFAULT NULL,
`fb` bigint(10) unsigned DEFAULT NULL
`fa` int(10) DEFAULT NULL,
`fb` int(8) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999999.9999999999999999999999
b 99999999.9999999999999999999999
@ -1674,8 +1674,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,23) DEFAULT NULL,
`b` decimal(30,23) unsigned DEFAULT NULL,
`fa` bigint(10) DEFAULT NULL,
`fb` int(9) unsigned DEFAULT NULL
`fa` int(9) DEFAULT NULL,
`fb` int(7) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999999.99999999999999999999999
b 9999999.99999999999999999999999
@ -1685,8 +1685,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,24) DEFAULT NULL,
`b` decimal(30,24) unsigned DEFAULT NULL,
`fa` int(9) DEFAULT NULL,
`fb` int(8) unsigned DEFAULT NULL
`fa` int(8) DEFAULT NULL,
`fb` int(6) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999999.999999999999999999999999
b 999999.999999999999999999999999
@ -1696,8 +1696,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,25) DEFAULT NULL,
`b` decimal(30,25) unsigned DEFAULT NULL,
`fa` int(8) DEFAULT NULL,
`fb` int(7) unsigned DEFAULT NULL
`fa` int(7) DEFAULT NULL,
`fb` int(5) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99999.9999999999999999999999999
b 99999.9999999999999999999999999
@ -1707,8 +1707,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,26) DEFAULT NULL,
`b` decimal(30,26) unsigned DEFAULT NULL,
`fa` int(7) DEFAULT NULL,
`fb` int(6) unsigned DEFAULT NULL
`fa` int(6) DEFAULT NULL,
`fb` int(4) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9999.99999999999999999999999999
b 9999.99999999999999999999999999
@ -1718,8 +1718,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,27) DEFAULT NULL,
`b` decimal(30,27) unsigned DEFAULT NULL,
`fa` int(6) DEFAULT NULL,
`fb` int(5) unsigned DEFAULT NULL
`fa` int(5) DEFAULT NULL,
`fb` int(3) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 999.999999999999999999999999999
b 999.999999999999999999999999999
@ -1729,8 +1729,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,28) DEFAULT NULL,
`b` decimal(30,28) unsigned DEFAULT NULL,
`fa` int(5) DEFAULT NULL,
`fb` int(4) unsigned DEFAULT NULL
`fa` int(4) DEFAULT NULL,
`fb` int(2) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 99.9999999999999999999999999999
b 99.9999999999999999999999999999
@ -1740,8 +1740,8 @@ Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(30,29) DEFAULT NULL,
`b` decimal(30,29) unsigned DEFAULT NULL,
`fa` int(4) DEFAULT NULL,
`fb` int(3) unsigned DEFAULT NULL
`fa` int(3) DEFAULT NULL,
`fb` int(1) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 9.99999999999999999999999999999
b 9.99999999999999999999999999999
@ -2295,7 +2295,7 @@ FORMAT(-1e308,2)
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`FORMAT(-1e308,2)` varchar(416) DEFAULT NULL
`FORMAT(-1e308,2)` varchar(417) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
CREATE OR REPLACE TABLE t1 AS SELECT FORMAT('-1e308',2);
@ -2305,7 +2305,7 @@ FORMAT('-1e308',2)
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`FORMAT('-1e308',2)` varchar(416) DEFAULT NULL
`FORMAT('-1e308',2)` varchar(417) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
CREATE OR REPLACE TABLE t1 AS SELECT FORMAT(DATE'20191231',0),FORMAT(TIME'99:05:00',0),FORMAT(TIMESTAMP'2019-12-31 23:59:59.123456',0);
@ -2317,7 +2317,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`FORMAT(DATE'20191231',0)` varchar(11) DEFAULT NULL,
`FORMAT(TIME'99:05:00',0)` varchar(10) DEFAULT NULL,
`FORMAT(TIMESTAMP'2019-12-31 23:59:59.123456',0)` varchar(19) DEFAULT NULL
`FORMAT(TIMESTAMP'2019-12-31 23:59:59.123456',0)` varchar(21) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
CREATE OR REPLACE TABLE t1 (y YEAR);
@ -3549,7 +3549,7 @@ FORMAT(f,0)
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`FORMAT(f,0)` varchar(53) DEFAULT NULL
`FORMAT(f,0)` varchar(54) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1,t2;
#

View File

@ -2708,7 +2708,7 @@ create table t1(a float);
insert into t1 values (1.33);
select format(a, 2) from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def format(a, 2) 253 56 4 Y 0 39 8
def format(a, 2) 253 57 4 Y 0 39 8
format(a, 2)
1.33
drop table t1;

View File

@ -2773,6 +2773,24 @@ root@localhost
DROP TABLE t1;
DROP USER dummy@localhost;
#
# MDEV-23082: ER_TABLEACCESS_DENIED_ERROR error message is truncated, and
# inaccurately
#
CREATE USER foo;
CREATE DATABASE db;
CREATE TABLE db.t (a INT);
connect con1,localhost,foo,,;
GRANT ALL ON db.t TO foo;
ERROR 42000: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW ... command denied to user 'foo'@'localhost' for table 't'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT OPTION, REFERENCES,
INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON db.t TO foo;
ERROR 42000: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW ... command denied to user 'foo'@'localhost' for table 't'
connection default;
disconnect con1;
DROP USER foo;
DROP TABLE db.t;
DROP DATABASE db;
#
# End of 10.2 tests
#
#

View File

@ -2259,6 +2259,31 @@ SELECT * FROM t1;
DROP TABLE t1;
DROP USER dummy@localhost;
--echo #
--echo # MDEV-23082: ER_TABLEACCESS_DENIED_ERROR error message is truncated, and
--echo # inaccurately
--echo #
CREATE USER foo;
CREATE DATABASE db;
CREATE TABLE db.t (a INT);
--connect (con1,localhost,foo,,)
--error ER_TABLEACCESS_DENIED_ERROR
GRANT ALL ON db.t TO foo;
--error ER_TABLEACCESS_DENIED_ERROR
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT OPTION, REFERENCES,
INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON db.t TO foo;
--connection default
--disconnect con1
DROP USER foo;
DROP TABLE db.t;
DROP DATABASE db;
--echo #
--echo # End of 10.2 tests
--echo #

View File

@ -2219,6 +2219,21 @@ SCHEMA_NAME
# End of 10.1 tests
#
#
# Start of 10.2 Test
#
# MDEV-14836: Assertion `m_status == DA_ERROR' failed in
# Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED
#
SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` LIMIT ROWS EXAMINED 10;
ERROR HY000: Unknown error
SHOW WARNINGS;
Level Code Message
Error 1105 Unknown error
Warning 1931 Query execution was interrupted. The query examined at least 11 rows, which exceeds LIMIT ROWS EXAMINED (10). The query result may be incomplete
#
# End of 10.2 Test
#
#
# MDEV-21201:No records produced in information_schema query,
# depending on projection
#

View File

@ -1921,6 +1921,20 @@ SELECT SCHEMA_NAME from information_schema.schemata where schema_name=REPEAT('a'
--echo # End of 10.1 tests
--echo #
--echo #
--echo # Start of 10.2 Test
--echo #
--echo # MDEV-14836: Assertion `m_status == DA_ERROR' failed in
--echo # Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED
--echo #
--error ER_UNKNOWN_ERROR
SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` LIMIT ROWS EXAMINED 10;
SHOW WARNINGS;
--echo #
--echo # End of 10.2 Test
--echo #
--echo #
--echo # MDEV-21201:No records produced in information_schema query,

View File

@ -85,6 +85,15 @@ END IF|
#
# Testing with explicit timezonefile
#
\d |
IF (select count(*) from information_schema.global_variables where
variable_name='wsrep_on' and variable_value='ON') = 1 THEN
ALTER TABLE time_zone ENGINE=InnoDB;
ALTER TABLE time_zone_name ENGINE=InnoDB;
ALTER TABLE time_zone_transition ENGINE=InnoDB;
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
END IF|
\d ;
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
SET @time_zone_id= LAST_INSERT_ID();
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('XXX', @time_zone_id);
@ -106,6 +115,15 @@ END IF|
\d |
IF (select count(*) from information_schema.global_variables where
variable_name='wsrep_on' and variable_value='ON') = 1 THEN
ALTER TABLE time_zone ENGINE=InnoDB;
ALTER TABLE time_zone_name ENGINE=InnoDB;
ALTER TABLE time_zone_transition ENGINE=InnoDB;
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
END IF|
\d ;
\d |
IF (select count(*) from information_schema.global_variables where
variable_name='wsrep_on' and variable_value='ON') = 1 THEN
ALTER TABLE time_zone_leap_second ENGINE=InnoDB;
END IF|
\d ;

View File

@ -66,20 +66,6 @@
sort-buffer-size 2097152
sql-mode STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql-safe-updates FALSE
@@ -1741,10 +1752,10 @@
sync-relay-log-info 10000
sysdate-is-now FALSE
system-versioning-alter-history ERROR
-table-cache 421
+table-cache 2000
table-definition-cache 400
-table-open-cache 421
-table-open-cache-instances 1
+table-open-cache 2000
+table-open-cache-instances 8
tc-heuristic-recover OFF
tcp-keepalive-interval 0
tcp-keepalive-probes 0
@@ -1753,6 +1764,8 @@
thread-cache-size 151
thread-pool-idle-timeout 60

View File

@ -1594,7 +1594,6 @@ max-binlog-cache-size 18446744073709547520
max-binlog-size 1073741824
max-binlog-stmt-cache-size 18446744073709547520
max-connect-errors 100
max-connections 151
max-delayed-threads 20
max-digest-length 1024
max-error-count 64
@ -1797,10 +1796,7 @@ sync-relay-log 10000
sync-relay-log-info 10000
sysdate-is-now FALSE
system-versioning-alter-history ERROR
table-cache 421
table-definition-cache 400
table-open-cache 421
table-open-cache-instances 1
tc-heuristic-recover OFF
tcp-keepalive-interval 0
tcp-keepalive-probes 0

View File

@ -23,7 +23,9 @@ perl;
log-slow-queries pid-file slow-query-log-file log-basename
datadir slave-load-tmpdir tmpdir socket thread-pool-size
large-files-support lower-case-file-system system-time-zone
collation-server character-set-server log-tc-size tls-version version.*/;
collation-server character-set-server log-tc-size table-cache
table-open-cache table-open-cache-instances max-connections
tls-version version.*/;
# Plugins which may or may not be there:
@plugins=qw/innodb archive blackhole federated partition s3

View File

@ -1801,6 +1801,13 @@ SELECT @@GLOBAL.password;
ERROR HY000: Unknown system variable 'password'
SELECT @@GLOBAL.role;
ERROR HY000: Unknown system variable 'role'
#
# MDEV-22022 Various mangled SQL statements will crash 10.3 to 10.5 debug builds
#
EXECUTE IMMEDIATE 'if(`systeminfo /FO LIST';
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '`systeminfo /FO LIST' at line 1
EXECUTE IMMEDIATE 'if(`systeminfo';
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '`systeminfo' at line 1
End of 10.3 tests
#
# MDEV-19540: 10.4 allow lock options with SELECT in brackets

View File

@ -1543,6 +1543,15 @@ SELECT @@GLOBAL.password;
--error ER_UNKNOWN_SYSTEM_VARIABLE
SELECT @@GLOBAL.role;
--echo #
--echo # MDEV-22022 Various mangled SQL statements will crash 10.3 to 10.5 debug builds
--echo #
--error ER_PARSE_ERROR
EXECUTE IMMEDIATE 'if(`systeminfo /FO LIST';
--error ER_PARSE_ERROR
EXECUTE IMMEDIATE 'if(`systeminfo';
--echo End of 10.3 tests
--echo #

View File

@ -2609,6 +2609,47 @@ Central America and the Caribbean 442 66422
SET @@optimizer_switch= @save_optimizer_switch;
DROP TABLE t1;
#
# MDEV-9513: Assertion `join->group_list || !join->is_in_subquery()' failed in create_sort_index
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (a INT);
INSERT INTO t2 VALUES (2),(3);
EXPLAIN
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
2 DEPENDENT SUBQUERY A ALL NULL NULL NULL NULL 2 Using where
3 DEPENDENT UNION B ALL NULL NULL NULL NULL 2 Using where
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
a
1
2
EXPLAIN
SELECT t1.a FROM t1 WHERE EXISTS (SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
2 SUBQUERY A ALL NULL NULL NULL NULL 2
3 UNION B ALL NULL NULL NULL NULL 2
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
SELECT t1.a FROM t1 WHERE EXISTS (SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
a
1
2
EXPLAIN
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION ALL SELECT B.a FROM t2 B ORDER BY 1);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
2 DEPENDENT SUBQUERY A ALL NULL NULL NULL NULL 2 Using where
3 DEPENDENT UNION B ALL NULL NULL NULL NULL 2 Using where
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION ALL SELECT B.a FROM t2 B ORDER BY 1);
a
1
2
DROP TABLE t1,t2;
# end of 10.1 tests
#
# MDEV-22852: SIGSEGV in sortlength (optimized builds)
#
SET @save_optimizer_switch=@@optimizer_switch;
@ -2620,6 +2661,31 @@ SELECT (SELECT DISTINCT t1i.b FROM t1 t1i GROUP BY t1i.a ORDER BY MAX(t1o.b)) FR
0
SET @@optimizer_switch= @save_optimizer_switch;
DROP TABLE t1;
#
# MDEV-17066: Bytes lost or Assertion `status_var.local_memory_used == 0 after DELETE
# with subquery with ROLLUP
#
CREATE TABLE t1 (i INT DEFAULT 0, c VARCHAR(2048));
INSERT INTO t1 SELECT 0, seq FROM seq_1_to_6000;
CREATE TABLE t2 (f VARCHAR(2048) DEFAULT '');
INSERT INTO t2 VALUES ('1'),('bar');
EXPLAIN
SELECT * FROM t2 WHERE f IN ( SELECT MAX(c) FROM t1 GROUP BY c WITH ROLLUP);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6000 Using filesort
SELECT * FROM t2 WHERE f IN ( SELECT MAX(c) FROM t1 GROUP BY c WITH ROLLUP);
f
1
SELECT * FROM t2;
f
1
bar
DELETE FROM t2 WHERE f IN ( SELECT MAX(c) FROM t1 GROUP BY c WITH ROLLUP );
SELECT * FROM t2;
f
bar
DROP TABLE t1, t2;
# End of 10.2 tests
#
# MDEV-19134: EXISTS() slower if ORDER BY is defined

View File

@ -7,6 +7,8 @@ drop table if exists t0,t1,t2,t3,t4,t5,t6;
drop view if exists v1, v2;
--enable_warnings
--source include/have_sequence.inc
set @subselect4_tmp= @@optimizer_switch;
set optimizer_switch='semijoin=on,firstmatch=on,loosescan=on';
set optimizer_switch='semijoin_with_cache=on';
@ -2141,6 +2143,31 @@ SET @@optimizer_switch= @save_optimizer_switch;
DROP TABLE t1;
--echo #
--echo # MDEV-9513: Assertion `join->group_list || !join->is_in_subquery()' failed in create_sort_index
--echo #
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (a INT);
INSERT INTO t2 VALUES (2),(3);
EXPLAIN
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
EXPLAIN
SELECT t1.a FROM t1 WHERE EXISTS (SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
SELECT t1.a FROM t1 WHERE EXISTS (SELECT A.a FROM t1 A UNION SELECT B.a FROM t2 B ORDER BY 1);
EXPLAIN
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION ALL SELECT B.a FROM t2 B ORDER BY 1);
SELECT t1.a FROM t1 WHERE t1.a IN ( SELECT A.a FROM t1 A UNION ALL SELECT B.a FROM t2 B ORDER BY 1);
DROP TABLE t1,t2;
--echo # end of 10.1 tests
--echo #
--echo # MDEV-22852: SIGSEGV in sortlength (optimized builds)
--echo #
@ -2153,6 +2180,27 @@ SELECT (SELECT DISTINCT t1i.b FROM t1 t1i GROUP BY t1i.a ORDER BY MAX(t1o.b)) FR
SET @@optimizer_switch= @save_optimizer_switch;
DROP TABLE t1;
--echo #
--echo # MDEV-17066: Bytes lost or Assertion `status_var.local_memory_used == 0 after DELETE
--echo # with subquery with ROLLUP
--echo #
CREATE TABLE t1 (i INT DEFAULT 0, c VARCHAR(2048));
INSERT INTO t1 SELECT 0, seq FROM seq_1_to_6000;
CREATE TABLE t2 (f VARCHAR(2048) DEFAULT '');
INSERT INTO t2 VALUES ('1'),('bar');
EXPLAIN
SELECT * FROM t2 WHERE f IN ( SELECT MAX(c) FROM t1 GROUP BY c WITH ROLLUP);
SELECT * FROM t2 WHERE f IN ( SELECT MAX(c) FROM t1 GROUP BY c WITH ROLLUP);
SELECT * FROM t2;
DELETE FROM t2 WHERE f IN ( SELECT MAX(c) FROM t1 GROUP BY c WITH ROLLUP );
SELECT * FROM t2;
DROP TABLE t1, t2;
--echo # End of 10.2 tests
--echo #

View File

@ -1103,5 +1103,35 @@ t2 CREATE TABLE `t2` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t2,t1;
#
# MDEV-23388 Assertion `args[0]->decimals == 0' failed in Item_func_round::fix_arg_int
#
SELECT ROUND(GREATEST('1', CAST('2020-12-12' AS DATE)));
ROUND(GREATEST('1', CAST('2020-12-12' AS DATE)))
20201212
Warnings:
Warning 1292 Truncated incorrect datetime value: '1'
SELECT GREATEST('1', CAST('2020-12-12' AS DATE));
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def GREATEST('1', CAST('2020-12-12' AS DATE)) 10 10 10 Y 128 0 63
GREATEST('1', CAST('2020-12-12' AS DATE))
2020-12-12
Warnings:
Warning 1292 Truncated incorrect datetime value: '1'
CREATE TABLE t1 (c_date DATE NOT NULL, c_int INT NOT NULL);
CREATE TABLE t2 AS SELECT
GREATEST(c_date,c_date),
GREATEST(c_date,c_int),
GREATEST(c_int,c_date)
FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`GREATEST(c_date,c_date)` date NOT NULL,
`GREATEST(c_date,c_int)` date DEFAULT NULL,
`GREATEST(c_int,c_date)` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t2;
DROP TABLE t1;
#
# End of 10.4 tests
#

View File

@ -749,6 +749,28 @@ CREATE TABLE t2 AS SELECT FLOOR(a), CEIL(a),ROUND(a),TRUNCATE(a,0) FROM t1;
SHOW CREATE TABLE t2;
DROP TABLE t2,t1;
--echo #
--echo # MDEV-23388 Assertion `args[0]->decimals == 0' failed in Item_func_round::fix_arg_int
--echo #
SELECT ROUND(GREATEST('1', CAST('2020-12-12' AS DATE)));
--disable_ps_protocol
--enable_metadata
SELECT GREATEST('1', CAST('2020-12-12' AS DATE));
--disable_metadata
--enable_ps_protocol
CREATE TABLE t1 (c_date DATE NOT NULL, c_int INT NOT NULL);
CREATE TABLE t2 AS SELECT
GREATEST(c_date,c_date),
GREATEST(c_date,c_int),
GREATEST(c_int,c_date)
FROM t1;
SHOW CREATE TABLE t2;
DROP TABLE t2;
DROP TABLE t1;
--echo #
--echo # End of 10.4 tests
--echo #

View File

@ -990,5 +990,175 @@ Warnings:
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 1
DROP TABLE t1;
#
# MDEV-23415 Server crash or Assertion `dec_length <= str_length' failed in Item_func_format::val_str_ascii
#
SELECT FORMAT('0', 50, 'de_DE');
FORMAT('0', 50, 'de_DE')
0,00000000000000000000000000000000000000
SELECT FORMAT(0e0, 50, 'de_DE');
FORMAT(0e0, 50, 'de_DE')
0,00000000000000000000000000000000000000
FOR d IN 0..50
DO
SELECT
d,
FORMAT(123456789.123456789e0, d, 'de_DE') AS fdbl,
FORMAT(123456789.123456789, d, 'de_DE') AS fdec;
END FOR;
$$
d 0
fdbl 123.456.789
fdec 123.456.789
d 1
fdbl 123.456.789,1
fdec 123.456.789,1
d 2
fdbl 123.456.789,12
fdec 123.456.789,12
d 3
fdbl 123.456.789,123
fdec 123.456.789,123
d 4
fdbl 123.456.789,1235
fdec 123.456.789,1235
d 5
fdbl 123.456.789,12346
fdec 123.456.789,12346
d 6
fdbl 123.456.789,123457
fdec 123.456.789,123457
d 7
fdbl 123.456.789,1234568
fdec 123.456.789,1234568
d 8
fdbl 123.456.789,12345680
fdec 123.456.789,12345679
d 9
fdbl 123.456.789,123456790
fdec 123.456.789,123456789
d 10
fdbl 123.456.789,1234567900
fdec 123.456.789,1234567890
d 11
fdbl 123.456.789,12345680000
fdec 123.456.789,12345678900
d 12
fdbl 123.456.789,123456790000
fdec 123.456.789,123456789000
d 13
fdbl 123.456.789,1234568000000
fdec 123.456.789,1234567890000
d 14
fdbl 123.456.789,12345679000000
fdec 123.456.789,12345678900000
d 15
fdbl 123.456.789,123456790000000
fdec 123.456.789,123456789000000
d 16
fdbl 123.456.789,1234567800000000
fdec 123.456.789,1234567890000000
d 17
fdbl 123.456.789,12345679000000000
fdec 123.456.789,12345678900000000
d 18
fdbl 123.456.789,123456790000000000
fdec 123.456.789,123456789000000000
d 19
fdbl 123.456.789,1234567900000000000
fdec 123.456.789,1234567890000000000
d 20
fdbl 123.456.789,12345679000000000000
fdec 123.456.789,12345678900000000000
d 21
fdbl 123.456.789,123456800000000000000
fdec 123.456.789,123456789000000000000
d 22
fdbl 123.456.789,1234567900000000000000
fdec 123.456.789,1234567890000000000000
d 23
fdbl 123.456.789,12345680000000000000000
fdec 123.456.789,12345678900000000000000
d 24
fdbl 123.456.789,123456790000000000000000
fdec 123.456.789,123456789000000000000000
d 25
fdbl 123.456.789,1234567900000000000000000
fdec 123.456.789,1234567890000000000000000
d 26
fdbl 123.456.789,12345679000000000000000000
fdec 123.456.789,12345678900000000000000000
d 27
fdbl 123.456.789,123456780000000000000000000
fdec 123.456.789,123456789000000000000000000
d 28
fdbl 123.456.789,1234567900000000000000000000
fdec 123.456.789,1234567890000000000000000000
d 29
fdbl 123.456.789,12345678000000000000000000000
fdec 123.456.789,12345678900000000000000000000
d 30
fdbl 123.456.789,123456790000000000000000000000
fdec 123.456.789,123456789000000000000000000000
d 31
fdbl 123.456.789,1234567900000000000000000000000
fdec 123.456.789,1234567890000000000000000000000
d 32
fdbl 123.456.789,12345679000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000
d 33
fdbl 123.456.789,123456790000000000000000000000000
fdec 123.456.789,123456789000000000000000000000000
d 34
fdbl 123.456.789,1234567900000000000000000000000000
fdec 123.456.789,1234567890000000000000000000000000
d 35
fdbl 123.456.789,12345679000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000
d 36
fdbl 123.456.789,123456790000000000000000000000000000
fdec 123.456.789,123456789000000000000000000000000000
d 37
fdbl 123.456.789,1234567900000000000000000000000000000
fdec 123.456.789,1234567890000000000000000000000000000
d 38
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 39
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 40
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 41
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 42
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 43
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 44
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 45
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 46
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 47
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 48
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 49
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
d 50
fdbl 123.456.789,12345678000000000000000000000000000000
fdec 123.456.789,12345678900000000000000000000000000000
#
# End of 10.4 tests
#

View File

@ -680,6 +680,26 @@ EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT * FROM t1 WHERE ?+a<=>1e0+a' USING 1e
EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT * FROM t1 WHERE 1e0+a<=>?+a' USING 1e0;
DROP TABLE t1;
--echo #
--echo # MDEV-23415 Server crash or Assertion `dec_length <= str_length' failed in Item_func_format::val_str_ascii
--echo #
SELECT FORMAT('0', 50, 'de_DE');
SELECT FORMAT(0e0, 50, 'de_DE');
--vertical_results
DELIMITER $$;
FOR d IN 0..50
DO
SELECT
d,
FORMAT(123456789.123456789e0, d, 'de_DE') AS fdbl,
FORMAT(123456789.123456789, d, 'de_DE') AS fdec;
END FOR;
$$
DELIMITER ;$$
--horizontal_results
--echo #
--echo # End of 10.4 tests
--echo #

View File

@ -2340,6 +2340,53 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
#
# MDEV-23105 Cast number string with many leading zeros to decimal gives unexpected result
#
SELECT CAST(0000000000000000000000000000000000000000000000000000000000000000000000000000000020.01 AS DECIMAL(15,2)) as val;
val
20.01
SET sql_mode='';
CREATE TABLE t1 (a TEXT);
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.0'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.9'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.99'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.994'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.995'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.999'));
CREATE TABLE t2 (a TEXT, d DECIMAL(15,2));
INSERT IGNORE INTO t2 (a,d) SELECT a, a FROM t1;
Warnings:
Note 1265 Data truncated for column 'd' at row 5
Note 1265 Data truncated for column 'd' at row 6
Note 1265 Data truncated for column 'd' at row 7
INSERT IGNORE INTO t2 (a,d) SELECT CONCAT('-',a), CONCAT('-',a) FROM t1;
Warnings:
Note 1265 Data truncated for column 'd' at row 5
Note 1265 Data truncated for column 'd' at row 6
Note 1265 Data truncated for column 'd' at row 7
SELECT d, a FROM t2 ORDER BY d,a;
d a
-2.00 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.995
-2.00 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.999
-1.99 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.99
-1.99 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.994
-1.90 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.9
-1.00 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
-1.00 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.0
1.00 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
1.00 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.0
1.90 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.9
1.99 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.99
1.99 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.994
2.00 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.995
2.00 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001.999
DROP TABLE t1, t2;
SET sql_mode=DEFAULT;
#
# End of 10.1 tests
#
#
# Bug#18408499 UNSIGNED BIGINT HIGH VALUES
# WRONG NUMERICAL COMPARISON RESULTS
#
@ -2406,3 +2453,323 @@ drop table t1;
#
# End of 10.2 tests
#
#
# Start of 10.4 tests
#
#
# MDEV-23032 FLOOR()/CEIL() incorrectly calculate the precision of a DECIMAL(M,D) column.
#
CREATE PROCEDURE p1(prec INT, scale INT, suffix VARCHAR(32))
BEGIN
EXECUTE IMMEDIATE CONCAT('CREATE TABLE t1 (a decimal(',prec,',',scale,')',suffix,')');
INSERT IGNORE INTO t1 VALUES (-1e100), (+1e100);
CREATE TABLE t2 AS SELECT
a,
FLOOR(a) AS fa,
CEILING(a) AS ca,
LENGTH(FLOOR(a)),
LENGTH(CEILING(a))
FROM t1 ORDER BY a;
SHOW CREATE TABLE t2;
SELECT * FROM t2;
DROP TABLE t2, t1;
END;
$$
CALL p1(38,10,'');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,10) DEFAULT NULL,
`fa` decimal(29,0) DEFAULT NULL,
`ca` decimal(29,0) DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -9999999999999999999999999999.9999999999
fa -10000000000000000000000000000
ca -9999999999999999999999999999
LENGTH(FLOOR(a)) 30
LENGTH(CEILING(a)) 29
a 9999999999999999999999999999.9999999999
fa 9999999999999999999999999999
ca 10000000000000000000000000000
LENGTH(FLOOR(a)) 28
LENGTH(CEILING(a)) 29
CALL p1(28,10,'');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(28,10) DEFAULT NULL,
`fa` decimal(19,0) DEFAULT NULL,
`ca` decimal(19,0) DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -999999999999999999.9999999999
fa -1000000000000000000
ca -999999999999999999
LENGTH(FLOOR(a)) 20
LENGTH(CEILING(a)) 19
a 999999999999999999.9999999999
fa 999999999999999999
ca 1000000000000000000
LENGTH(FLOOR(a)) 18
LENGTH(CEILING(a)) 19
CALL p1(27,10,'');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(27,10) DEFAULT NULL,
`fa` bigint(19) DEFAULT NULL,
`ca` bigint(19) DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -99999999999999999.9999999999
fa -100000000000000000
ca -99999999999999999
LENGTH(FLOOR(a)) 19
LENGTH(CEILING(a)) 18
a 99999999999999999.9999999999
fa 99999999999999999
ca 100000000000000000
LENGTH(FLOOR(a)) 17
LENGTH(CEILING(a)) 18
CALL p1(20,10,'');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(20,10) DEFAULT NULL,
`fa` bigint(12) DEFAULT NULL,
`ca` bigint(12) DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -9999999999.9999999999
fa -10000000000
ca -9999999999
LENGTH(FLOOR(a)) 12
LENGTH(CEILING(a)) 11
a 9999999999.9999999999
fa 9999999999
ca 10000000000
LENGTH(FLOOR(a)) 10
LENGTH(CEILING(a)) 11
CALL p1(19,10,'');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(19,10) DEFAULT NULL,
`fa` bigint(11) DEFAULT NULL,
`ca` bigint(11) DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -999999999.9999999999
fa -1000000000
ca -999999999
LENGTH(FLOOR(a)) 11
LENGTH(CEILING(a)) 10
a 999999999.9999999999
fa 999999999
ca 1000000000
LENGTH(FLOOR(a)) 9
LENGTH(CEILING(a)) 10
CALL p1(18,10,'');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(18,10) DEFAULT NULL,
`fa` int(10) DEFAULT NULL,
`ca` int(10) DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -99999999.9999999999
fa -100000000
ca -99999999
LENGTH(FLOOR(a)) 10
LENGTH(CEILING(a)) 9
a 99999999.9999999999
fa 99999999
ca 100000000
LENGTH(FLOOR(a)) 8
LENGTH(CEILING(a)) 9
CALL p1(10,10,'');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(10,10) DEFAULT NULL,
`fa` int(2) DEFAULT NULL,
`ca` int(2) DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a -0.9999999999
fa -1
ca 0
LENGTH(FLOOR(a)) 2
LENGTH(CEILING(a)) 1
a 0.9999999999
fa 0
ca 1
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
CALL p1(38,10,' UNSIGNED');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,10) unsigned DEFAULT NULL,
`fa` decimal(28,0) unsigned DEFAULT NULL,
`ca` decimal(29,0) unsigned DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0.0000000000
fa 0
ca 0
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
a 9999999999999999999999999999.9999999999
fa 9999999999999999999999999999
ca 10000000000000000000000000000
LENGTH(FLOOR(a)) 28
LENGTH(CEILING(a)) 29
CALL p1(28,10,' UNSIGNED');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(28,10) unsigned DEFAULT NULL,
`fa` bigint(18) unsigned DEFAULT NULL,
`ca` decimal(19,0) unsigned DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0.0000000000
fa 0
ca 0
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
a 999999999999999999.9999999999
fa 999999999999999999
ca 1000000000000000000
LENGTH(FLOOR(a)) 18
LENGTH(CEILING(a)) 19
CALL p1(27,10,' UNSIGNED');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(27,10) unsigned DEFAULT NULL,
`fa` bigint(17) unsigned DEFAULT NULL,
`ca` bigint(18) unsigned DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0.0000000000
fa 0
ca 0
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
a 99999999999999999.9999999999
fa 99999999999999999
ca 100000000000000000
LENGTH(FLOOR(a)) 17
LENGTH(CEILING(a)) 18
CALL p1(20,10,' UNSIGNED');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(20,10) unsigned DEFAULT NULL,
`fa` bigint(10) unsigned DEFAULT NULL,
`ca` bigint(11) unsigned DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0.0000000000
fa 0
ca 0
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
a 9999999999.9999999999
fa 9999999999
ca 10000000000
LENGTH(FLOOR(a)) 10
LENGTH(CEILING(a)) 11
CALL p1(19,10,' UNSIGNED');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(19,10) unsigned DEFAULT NULL,
`fa` int(9) unsigned DEFAULT NULL,
`ca` bigint(10) unsigned DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0.0000000000
fa 0
ca 0
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
a 999999999.9999999999
fa 999999999
ca 1000000000
LENGTH(FLOOR(a)) 9
LENGTH(CEILING(a)) 10
CALL p1(18,10,' UNSIGNED');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(18,10) unsigned DEFAULT NULL,
`fa` int(8) unsigned DEFAULT NULL,
`ca` int(9) unsigned DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0.0000000000
fa 0
ca 0
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
a 99999999.9999999999
fa 99999999
ca 100000000
LENGTH(FLOOR(a)) 8
LENGTH(CEILING(a)) 9
CALL p1(10,10,' UNSIGNED');
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(10,10) unsigned DEFAULT NULL,
`fa` int(1) unsigned DEFAULT NULL,
`ca` int(1) unsigned DEFAULT NULL,
`LENGTH(FLOOR(a))` int(10) DEFAULT NULL,
`LENGTH(CEILING(a))` int(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
a 0.0000000000
fa 0
ca 0
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
a 0.9999999999
fa 0
ca 1
LENGTH(FLOOR(a)) 1
LENGTH(CEILING(a)) 1
DROP PROCEDURE p1;
#
# MDEV-23118 FORMAT(d1,dec) where dec=0/38 and d1 is DECIMAL(38,38) gives incorrect results
#
CREATE OR REPLACE TABLE t1 (a DECIMAL(38,38));
INSERT INTO t1 VALUES (-0.9999999999999999999999999999999999999), (0.9999999999999999999999999999999999999);
SELECT a, FORMAT(a,0), FORMAT(a,38) FROM t1;
a -0.99999999999999999999999999999999999990
FORMAT(a,0) -1
FORMAT(a,38) -0.99999999999999999999999999999999999990
a 0.99999999999999999999999999999999999990
FORMAT(a,0) 1
FORMAT(a,38) 0.99999999999999999999999999999999999990
CREATE OR REPLACE TABLE t2 AS SELECT a, FORMAT(a,0), FORMAT(a,38) FROM t1;
SELECT * FROM t2;
a -0.99999999999999999999999999999999999990
FORMAT(a,0) -1
FORMAT(a,38) -0.99999999999999999999999999999999999990
a 0.99999999999999999999999999999999999990
FORMAT(a,0) 1
FORMAT(a,38) 0.99999999999999999999999999999999999990
SHOW CREATE TABLE t2;
Table t2
Create Table CREATE TABLE `t2` (
`a` decimal(38,38) DEFAULT NULL,
`FORMAT(a,0)` varchar(2) DEFAULT NULL,
`FORMAT(a,38)` varchar(41) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t2,t1;
#
# End of 10.4 tests
#

View File

@ -1824,6 +1824,32 @@ CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 0.10001e0);
SHOW CREATE TABLE t1;
DROP TABLE t1;
--echo #
--echo # MDEV-23105 Cast number string with many leading zeros to decimal gives unexpected result
--echo #
SELECT CAST(0000000000000000000000000000000000000000000000000000000000000000000000000000000020.01 AS DECIMAL(15,2)) as val;
SET sql_mode='';
CREATE TABLE t1 (a TEXT);
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.0'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.9'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.99'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.994'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.995'));
INSERT INTO t1 VALUES (CONCAT(REPEAT('0',100),1,'.999'));
CREATE TABLE t2 (a TEXT, d DECIMAL(15,2));
INSERT IGNORE INTO t2 (a,d) SELECT a, a FROM t1;
INSERT IGNORE INTO t2 (a,d) SELECT CONCAT('-',a), CONCAT('-',a) FROM t1;
SELECT d, a FROM t2 ORDER BY d,a;
DROP TABLE t1, t2;
SET sql_mode=DEFAULT;
--echo #
--echo # End of 10.1 tests
--echo #
--echo #
--echo # Bug#18408499 UNSIGNED BIGINT HIGH VALUES
--echo # WRONG NUMERICAL COMPARISON RESULTS
@ -1871,3 +1897,70 @@ drop table t1;
--echo #
--echo # End of 10.2 tests
--echo #
--echo #
--echo # Start of 10.4 tests
--echo #
--echo #
--echo # MDEV-23032 FLOOR()/CEIL() incorrectly calculate the precision of a DECIMAL(M,D) column.
--echo #
DELIMITER $$;
CREATE PROCEDURE p1(prec INT, scale INT, suffix VARCHAR(32))
BEGIN
EXECUTE IMMEDIATE CONCAT('CREATE TABLE t1 (a decimal(',prec,',',scale,')',suffix,')');
INSERT IGNORE INTO t1 VALUES (-1e100), (+1e100);
CREATE TABLE t2 AS SELECT
a,
FLOOR(a) AS fa,
CEILING(a) AS ca,
LENGTH(FLOOR(a)),
LENGTH(CEILING(a))
FROM t1 ORDER BY a;
SHOW CREATE TABLE t2;
SELECT * FROM t2;
DROP TABLE t2, t1;
END;
$$
DELIMITER ;$$
--vertical_results
CALL p1(38,10,'');
CALL p1(28,10,'');
CALL p1(27,10,'');
CALL p1(20,10,'');
CALL p1(19,10,'');
CALL p1(18,10,'');
CALL p1(10,10,'');
CALL p1(38,10,' UNSIGNED');
CALL p1(28,10,' UNSIGNED');
CALL p1(27,10,' UNSIGNED');
CALL p1(20,10,' UNSIGNED');
CALL p1(19,10,' UNSIGNED');
CALL p1(18,10,' UNSIGNED');
CALL p1(10,10,' UNSIGNED');
--horizontal_results
DROP PROCEDURE p1;
--echo #
--echo # MDEV-23118 FORMAT(d1,dec) where dec=0/38 and d1 is DECIMAL(38,38) gives incorrect results
--echo #
--vertical_results
CREATE OR REPLACE TABLE t1 (a DECIMAL(38,38));
INSERT INTO t1 VALUES (-0.9999999999999999999999999999999999999), (0.9999999999999999999999999999999999999);
SELECT a, FORMAT(a,0), FORMAT(a,38) FROM t1;
CREATE OR REPLACE TABLE t2 AS SELECT a, FORMAT(a,0), FORMAT(a,38) FROM t1;
SELECT * FROM t2;
SHOW CREATE TABLE t2;
DROP TABLE t2,t1;
--horizontal_results
--echo #
--echo # End of 10.4 tests
--echo #

View File

@ -3851,6 +3851,22 @@ ERROR 42000: Too big scale 56 specified for 'rank() over w1'. Maximum is 38
SELECT cast((rank() over w1) as decimal (53,30));
ERROR HY000: Window specification with name 'w1' is not defined
#
# MDEV-15180: server crashed with NTH_VALUE()
#
CREATE TABLE t1 (i1 int, a int);
INSERT INTO t1 VALUES (1, 1), (2, 2),(3, 3);
CREATE TABLE t2 (i2 int);
INSERT INTO t2 VALUES (1),(2),(5),(1),(7),(4),(3);
CREATE VIEW v1 AS (SELECT * FROM t1,t2 WHERE t1.i1=t2.i2) ;
SELECT NTH_VALUE(i1, i1) OVER (PARTITION BY i1) FROM v1;
NTH_VALUE(i1, i1) OVER (PARTITION BY i1)
1
1
NULL
NULL
DROP VIEW v1;
DROP TABLE t1,t2;
#
# End of 10.2 tests
#
#

View File

@ -2505,6 +2505,22 @@ SELECT cast((rank() over w1) as decimal (53,56));
--error ER_WRONG_WINDOW_SPEC_NAME
SELECT cast((rank() over w1) as decimal (53,30));
--echo #
--echo # MDEV-15180: server crashed with NTH_VALUE()
--echo #
CREATE TABLE t1 (i1 int, a int);
INSERT INTO t1 VALUES (1, 1), (2, 2),(3, 3);
CREATE TABLE t2 (i2 int);
INSERT INTO t2 VALUES (1),(2),(5),(1),(7),(4),(3);
CREATE VIEW v1 AS (SELECT * FROM t1,t2 WHERE t1.i1=t2.i2) ;
SELECT NTH_VALUE(i1, i1) OVER (PARTITION BY i1) FROM v1;
DROP VIEW v1;
DROP TABLE t1,t2;
--echo #
--echo # End of 10.2 tests
--echo #

View File

@ -15,6 +15,7 @@ GCF-939 : MDEV-21520 galera.GCF-939
MDEV-16509 : MDEV-21523 galera.MDEV-16509
MDEV-20225 : MDEV-20886 galera.MDEV-20225
MW-286 : MDEV-18464 Killing thread can cause mutex deadlock if done concurrently with Galera/replication victim kill
MW-328A : MDEV-22666 galera.MW-328A MTR failed: "Semaphore wait has lasted > 600 seconds" and do not release port 16002
MW-329 : MDEV-19962 Galera test failure on MW-329
galera.galera_defaults : MDEV-21494 Galera test sporadic failure on galera.galera_defaults
galera_as_slave_replication_bundle : MDEV-15785 OPTION_GTID_BEGIN is set in Gtid_log_event::do_apply_event()

View File

@ -6,24 +6,41 @@ connection node_1;
call mtr.add_suppression("WSREP: Trying to continue unpaused monitor");
CREATE TABLE t1 ENGINE=InnoDB select 1 as a, 1 as b union select 2, 2;
ALTER TABLE t1 add primary key(a);
CREATE PROCEDURE p1()
CREATE PROCEDURE p1(repeat_count INT)
BEGIN
DECLARE current_num int;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback;
WHILE 1 DO
SET current_num = 0;
WHILE current_num < repeat_count DO
start transaction;
update t1 set b=connection_id() where a=1;
commit;
SET current_num = current_num + 1;
END WHILE;
END|
connection node_2;
connect node_1_p1, 127.0.0.1, root, , test, $NODE_MYPORT_1;
call p1;
SET SESSION wsrep_sync_wait=0;
call p1(1000);
connect node_1_p2, 127.0.0.1, root, , test, $NODE_MYPORT_1;
call p1;
SET SESSION wsrep_sync_wait=0;
call p1(1000);
connect node_2_p1, 127.0.0.1, root, , test, $NODE_MYPORT_2;
call p1;
SET SESSION wsrep_sync_wait=0;
call p1(1000);
connect node_2_p2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
call p1;
SET SESSION wsrep_sync_wait=0;
call p1(1000);
connection node_1;
checking error log for 'BF lock wait long' message for 10 times every 10 seconds ...
connection node_1_p1;
connection node_1_p2;
connection node_2_p1;
connection node_2_p2;
connection node_1;
drop table t1;
drop procedure p1;
disconnect node_1_p1;
disconnect node_1_p2;
disconnect node_2_p1;
disconnect node_2_p2;

View File

@ -13,27 +13,39 @@ ALTER TABLE t1 add primary key(a);
DELIMITER |;
CREATE PROCEDURE p1()
CREATE PROCEDURE p1(repeat_count INT)
BEGIN
DECLARE current_num int;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback;
WHILE 1 DO
SET current_num = 0;
WHILE current_num < repeat_count DO
start transaction;
update t1 set b=connection_id() where a=1;
commit;
SET current_num = current_num + 1;
END WHILE;
END|
DELIMITER ;|
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = 'p1'
--source include/wait_condition.inc
--connect node_1_p1, 127.0.0.1, root, , test, $NODE_MYPORT_1
send call p1;
SET SESSION wsrep_sync_wait=0;
send call p1(1000);
--connect node_1_p2, 127.0.0.1, root, , test, $NODE_MYPORT_1
send call p1;
SET SESSION wsrep_sync_wait=0;
send call p1(1000);
--connect node_2_p1, 127.0.0.1, root, , test, $NODE_MYPORT_2
send call p1;
SET SESSION wsrep_sync_wait=0;
send call p1(1000);
--connect node_2_p2, 127.0.0.1, root, , test, $NODE_MYPORT_2
send call p1;
SET SESSION wsrep_sync_wait=0;
send call p1(1000);
connection node_1;
let $counter=10;
@ -53,7 +65,26 @@ while($counter > 0)
exec grep 'BF lock wait long' $MYSQLTEST_VARDIR/log/mysqld.*.err;
dec $counter;
}
--connection node_1_p1
--error 0,1213
--reap
--connection node_1_p2
--error 0,1213
--reap
--connection node_2_p1
--error 0,1213
--reap
--connection node_2_p2
--error 0,1213
--reap
--connection node_1
drop table t1;
drop procedure p1;
--disconnect node_1_p1
--disconnect node_1_p2
--disconnect node_2_p1
--disconnect node_2_p2

View File

@ -1,12 +1,15 @@
connection node_2;
connection node_1;
call mtr.add_suppression("WSREP: gcs/src/gcs_core.cpp:core_handle_uuid_msg\\(\\).*");
CREATE TABLE t1 (f1 INTEGER);
connection node_1;
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
connection node_2;
SET SESSION wsrep_sync_wait=0;
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
connection node_3;
SET SESSION wsrep_sync_wait=0;
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
SET SESSION wsrep_sync_wait = 0;
connection node_2;

View File

@ -6,6 +6,8 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
call mtr.add_suppression("WSREP: gcs/src/gcs_core.cpp:core_handle_uuid_msg\\(\\).*");
CREATE TABLE t1 (f1 INTEGER);
# Force all nodes to become non-primary
@ -13,13 +15,19 @@ CREATE TABLE t1 (f1 INTEGER);
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
--connection node_2
SET SESSION wsrep_sync_wait=0;
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
--source include/wait_condition.inc
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
--connection node_3
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
SET SESSION wsrep_sync_wait=0;
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
--source include/wait_condition.inc
--sleep 10
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
# Node #2 should be non-primary
SET SESSION wsrep_sync_wait = 0;
@ -44,7 +52,7 @@ INSERT INTO t1 VALUES (1);
# Reconnect all nodes
--connection node_2
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
--sleep 10
--source include/wait_until_connected_again.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
@ -67,7 +75,7 @@ SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
--connection node_3
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
--sleep 10
--source include/wait_until_connected_again.inc
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc

View File

@ -85,6 +85,15 @@ END IF|
#
# Testing with explicit timezonefile
#
\d |
IF (select count(*) from information_schema.global_variables where
variable_name='wsrep_on' and variable_value='ON') = 1 THEN
ALTER TABLE time_zone ENGINE=InnoDB;
ALTER TABLE time_zone_name ENGINE=InnoDB;
ALTER TABLE time_zone_transition ENGINE=InnoDB;
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
END IF|
\d ;
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
SET @time_zone_id= LAST_INSERT_ID();
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('XXX', @time_zone_id);
@ -106,6 +115,15 @@ END IF|
\d |
IF (select count(*) from information_schema.global_variables where
variable_name='wsrep_on' and variable_value='ON') = 1 THEN
ALTER TABLE time_zone ENGINE=InnoDB;
ALTER TABLE time_zone_name ENGINE=InnoDB;
ALTER TABLE time_zone_transition ENGINE=InnoDB;
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
END IF|
\d ;
\d |
IF (select count(*) from information_schema.global_variables where
variable_name='wsrep_on' and variable_value='ON') = 1 THEN
ALTER TABLE time_zone_leap_second ENGINE=InnoDB;
END IF|
\d ;

View File

@ -2245,35 +2245,54 @@ bool Item_func_bit_neg::fix_length_and_dec()
void Item_func_int_val::fix_length_and_dec_int_or_decimal()
{
DBUG_ASSERT(args[0]->cmp_type() == DECIMAL_RESULT);
DBUG_ASSERT(args[0]->max_length <= DECIMAL_MAX_STR_LENGTH);
/*
The INT branch of this code should be revised.
It creates too large data types, e.g.
CREATE OR REPLACE TABLE t2 AS SELECT FLOOR(9999999.999) AS fa;
results in a BININT(10) column, while INT(7) should probably be enough.
FLOOR() for negative numbers can increase length: floor(-9.9) -> -10
CEILING() for positive numbers can increase length: ceil(9.9) -> 10
*/
ulonglong tmp_max_length= (ulonglong ) args[0]->max_length -
(args[0]->decimals ? args[0]->decimals + 1 : 0) + 2;
max_length= tmp_max_length > (ulonglong) UINT_MAX32 ?
(uint32) UINT_MAX32 : (uint32) tmp_max_length;
uint tmp= float_length(decimals);
set_if_smaller(max_length,tmp);
decimals= 0;
decimal_round_mode mode= round_mode();
uint length_increase= args[0]->decimals > 0 &&
(mode == CEILING ||
(mode == FLOOR && !args[0]->unsigned_flag)) ? 1 : 0;
uint precision= args[0]->decimal_int_part() + length_increase;
set_if_bigger(precision, 1);
/*
-2 because in most high position can't be used any digit for longlong
and one position for increasing value during operation
The BIGINT data type can store:
UNSIGNED BIGINT: 0..18446744073709551615 - up to 19 digits
SIGNED BIGINT: -9223372036854775808..9223372036854775807 - up to 18 digits
The INT data type can store:
UNSIGNED INT: 0..4294967295 - up to 9 digits
SIGNED INT: -2147483648..2147483647 - up to 9 digits
*/
if (args[0]->max_length - args[0]->decimals >= DECIMAL_LONGLONG_DIGITS - 2)
if (precision > 18)
{
unsigned_flag= args[0]->unsigned_flag;
fix_char_length(
my_decimal_precision_to_length_no_truncation(
args[0]->decimal_int_part(), 0, false));
my_decimal_precision_to_length_no_truncation(precision, 0,
unsigned_flag));
set_handler(&type_handler_newdecimal);
}
else
{
unsigned_flag= args[0]->unsigned_flag;
set_handler(type_handler_long_or_longlong());
uint sign_length= (unsigned_flag= args[0]->unsigned_flag) ? 0 : 1;
fix_char_length(precision + sign_length);
if (precision > 9)
{
if (unsigned_flag)
set_handler(&type_handler_ulonglong);
else
set_handler(&type_handler_slonglong);
}
else
{
if (unsigned_flag)
set_handler(&type_handler_ulong);
else
set_handler(&type_handler_slong);
}
}
}

View File

@ -1838,6 +1838,7 @@ public:
Item_func_int_val(THD *thd, Item *a): Item_func_hybrid_field_type(thd, a) {}
bool check_partition_func_processor(void *int_arg) { return FALSE; }
bool check_vcol_func_processor(void *arg) { return FALSE; }
virtual decimal_round_mode round_mode() const= 0;
void fix_length_and_dec_double();
void fix_length_and_dec_int_or_decimal();
void fix_length_and_dec_time()
@ -1866,6 +1867,7 @@ class Item_func_ceiling :public Item_func_int_val
public:
Item_func_ceiling(THD *thd, Item *a): Item_func_int_val(thd, a) {}
const char *func_name() const { return "ceiling"; }
decimal_round_mode round_mode() const { return CEILING; }
longlong int_op();
double real_op();
my_decimal *decimal_op(my_decimal *);
@ -1881,6 +1883,7 @@ class Item_func_floor :public Item_func_int_val
public:
Item_func_floor(THD *thd, Item *a): Item_func_int_val(thd, a) {}
const char *func_name() const { return "floor"; }
decimal_round_mode round_mode() const { return FLOOR; }
longlong int_op();
double real_op();
my_decimal *decimal_op(my_decimal *);

View File

@ -2642,18 +2642,42 @@ String *Item_func_soundex::val_str(String *str)
This should be 'internationalized' sometimes.
*/
const int FORMAT_MAX_DECIMALS= 30;
/*
The maximum supported decimal scale:
38 - starting from 10.2.1
30 - before 10.2.1
*/
const int FORMAT_MAX_DECIMALS= 38;
bool Item_func_format::fix_length_and_dec()
{
uint32 char_length= args[0]->type_handler()->Item_decimal_notation_int_digits(args[0]);
uint dec= FORMAT_MAX_DECIMALS;
if (args[1]->const_item() && !args[1]->is_expensive() && !args[1]->null_value)
/*
Format can require one more integer digit if rounding happens:
FORMAT(9.9,0) -> '10'
Set need_extra_digit_for_rounding to true by default
if args[0] has some decimals: if args[1] is not
a constant, then format can potentially reduce
the number of decimals and round to the next integer.
*/
bool need_extra_digit_for_rounding= args[0]->decimals > 0;
if (args[1]->const_item() && !args[1]->is_expensive())
{
Longlong_hybrid tmp= args[1]->to_longlong_hybrid();
dec= tmp.to_uint(FORMAT_MAX_DECIMALS);
if (!args[1]->null_value)
{
dec= tmp.to_uint(FORMAT_MAX_DECIMALS);
need_extra_digit_for_rounding= (dec < args[0]->decimals);
}
}
/*
In case of a data type with zero integer digits, e.g. DECIMAL(4,4),
we'll print at least one integer digit.
*/
if (need_extra_digit_for_rounding || !char_length)
char_length++;
uint32 max_sep_count= (char_length / 3) + (dec ? 1 : 0) + /*sign*/1;
collation.set(default_charset());
fix_char_length(char_length + max_sep_count + dec);
@ -2709,7 +2733,7 @@ String *Item_func_format::val_str_ascii(String *str)
if ((null_value=args[0]->null_value))
return 0; /* purecov: inspected */
nr= my_double_round(nr, (longlong) dec, FALSE, FALSE);
str->set_real(nr, dec, &my_charset_numeric);
str->set_fcvt(nr, dec);
if (!std::isfinite(nr))
return str;
str_length=str->length();

View File

@ -149,6 +149,10 @@ public:
Item_subselect(THD *thd);
virtual subs_type substype() { return UNKNOWN_SUBS; }
bool is_exists_predicate()
{
return substype() == Item_subselect::EXISTS_SUBS;
}
bool is_in_predicate()
{
return get_IN_subquery() != NULL;

View File

@ -350,12 +350,9 @@ bool init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
void end_read_record(READ_RECORD *info)
{ /* free cache if used */
if (info->cache)
{
my_free_lock(info->cache);
info->cache=0;
}
{
/* free cache if used */
free_cache(info);
if (info->table)
{
if (info->table->is_created())
@ -366,6 +363,17 @@ void end_read_record(READ_RECORD *info)
}
}
void free_cache(READ_RECORD *info)
{
if (info->cache)
{
my_free_lock(info->cache);
info->cache=0;
}
}
static int rr_handle_error(READ_RECORD *info, int error)
{
if (info->thd->killed)

View File

@ -31,6 +31,7 @@ class SORT_INFO;
struct READ_RECORD;
void end_read_record(READ_RECORD *info);
void free_cache(READ_RECORD *info);
/**
A context for reading through a single table using a chosen access method:

View File

@ -3244,25 +3244,25 @@ ER_NONEXISTING_GRANT 42000
swe "Det finns inget privilegium definierat för användare '%-.48s' på '%-.64s'"
ukr "Повноважень не визначено для користувача '%-.48s' з хосту '%-.64s'"
ER_TABLEACCESS_DENIED_ERROR 42000
cze "%-.32s příkaz nepřístupný pro uživatele: '%s'@'%s' pro tabulku '%-.192s'"
dan "%-.32s-kommandoen er ikke tilladt for brugeren '%s'@'%s' for tabellen '%-.192s'"
nla "%-.32s commando geweigerd voor gebruiker: '%s'@'%s' voor tabel '%-.192s'"
eng "%-.32s command denied to user '%s'@'%s' for table '%-.192s'"
jps "コマンド %-.32s は ユーザー '%s'@'%s' ,テーブル '%-.192s' に対して許可されていません",
est "%-.32s käsk ei ole lubatud kasutajale '%s'@'%s' tabelis '%-.192s'"
fre "La commande '%-.32s' est interdite à l'utilisateur: '%s'@'%s' sur la table '%-.192s'"
ger "%-.32s Befehl nicht erlaubt für Benutzer '%s'@'%s' auf Tabelle '%-.192s'"
hun "%-.32s parancs a '%s'@'%s' felhasznalo szamara nem engedelyezett a '%-.192s' tablaban"
ita "Comando %-.32s negato per l'utente: '%s'@'%s' sulla tabella '%-.192s'"
jpn "コマンド %-.32s は ユーザー '%s'@'%s' ,テーブル '%-.192s' に対して許可されていません"
kor "'%-.32s' 명령은 다음 사용자에게 거부되었습니다. : '%s'@'%s' for 테이블 '%-.192s'"
por "Comando '%-.32s' negado para o usuário '%s'@'%s' na tabela '%-.192s'"
rum "Comanda %-.32s interzisa utilizatorului: '%s'@'%s' pentru tabela '%-.192s'"
rus "Команда %-.32s запрещена пользователю '%s'@'%s' для таблицы '%-.192s'"
serbian "%-.32s komanda zabranjena za korisnika '%s'@'%s' za tabelu '%-.192s'"
spa "%-.32s comando negado para usuario: '%s'@'%s' para tabla '%-.192s'"
swe "%-.32s ej tillåtet för '%s'@'%s' för tabell '%-.192s'"
ukr "%-.32s команда заборонена користувачу: '%s'@'%s' у таблиці '%-.192s'"
cze "%-.100T příkaz nepřístupný pro uživatele: '%s'@'%s' pro tabulku '%-.192s'"
dan "%-.100T-kommandoen er ikke tilladt for brugeren '%s'@'%s' for tabellen '%-.192s'"
nla "%-.100T commando geweigerd voor gebruiker: '%s'@'%s' voor tabel '%-.192s'"
eng "%-.100T command denied to user '%s'@'%s' for table '%-.192s'"
jps "コマンド %-.100T は ユーザー '%s'@'%s' ,テーブル '%-.192s' に対して許可されていません",
est "%-.100T käsk ei ole lubatud kasutajale '%s'@'%s' tabelis '%-.192s'"
fre "La commande '%-.100T' est interdite à l'utilisateur: '%s'@'%s' sur la table '%-.192s'"
ger "%-.100T Befehl nicht erlaubt für Benutzer '%s'@'%s' auf Tabelle '%-.192s'"
hun "%-.100T parancs a '%s'@'%s' felhasznalo szamara nem engedelyezett a '%-.192s' tablaban"
ita "Comando %-.100T negato per l'utente: '%s'@'%s' sulla tabella '%-.192s'"
jpn "コマンド %-.100T は ユーザー '%s'@'%s' ,テーブル '%-.192s' に対して許可されていません"
kor "'%-.100T' 명령은 다음 사용자에게 거부되었습니다. : '%s'@'%s' for 테이블 '%-.192s'"
por "Comando '%-.100T' negado para o usuário '%s'@'%s' na tabela '%-.192s'"
rum "Comanda %-.100T interzisa utilizatorului: '%s'@'%s' pentru tabela '%-.192s'"
rus "Команда %-.100T запрещена пользователю '%s'@'%s' для таблицы '%-.192s'"
serbian "%-.100T komanda zabranjena za korisnika '%s'@'%s' za tabelu '%-.192s'"
spa "%-.100T comando negado para usuario: '%s'@'%s' para tabla '%-.192s'"
swe "%-.100T ej tillåtet för '%s'@'%s' för tabell '%-.192s'"
ukr "%-.100T команда заборонена користувачу: '%s'@'%s' у таблиці '%-.192s'"
ER_COLUMNACCESS_DENIED_ERROR 42000
cze "%-.32s příkaz nepřístupný pro uživatele: '%s'@'%s' pro sloupec '%-.192s' v tabulce '%-.192s'"
dan "%-.32s-kommandoen er ikke tilladt for brugeren '%s'@'%s' for kolonne '%-.192s' in tabellen '%-.192s'"

View File

@ -2812,8 +2812,17 @@ int Lex_input_stream::scan_ident_delimited(THD *thd,
uchar c;
DBUG_ASSERT(m_ptr == m_tok_start + 1);
while ((c= yyGet()))
for ( ; ; )
{
if (!(c= yyGet()))
{
/*
End-of-query or straight 0x00 inside a delimited identifier.
Return the quote character, to have the parser fail on syntax error.
*/
m_ptr= (char *) m_tok_start + 1;
return quote_char;
}
int var_length= cs->charlen(get_ptr() - 1, get_end_of_query());
if (var_length == 1)
{

View File

@ -13885,24 +13885,7 @@ void JOIN::cleanup(bool full)
for (tab= first_linear_tab(this, WITH_BUSH_ROOTS, WITH_CONST_TABLES); tab;
tab= next_linear_tab(this, tab, WITH_BUSH_ROOTS))
{
if (!tab->table)
continue;
DBUG_PRINT("info", ("close index: %s.%s alias: %s",
tab->table->s->db.str,
tab->table->s->table_name.str,
tab->table->alias.c_ptr()));
if (tab->table->is_created())
{
tab->table->file->ha_index_or_rnd_end();
if (tab->aggr)
{
int tmp= 0;
if ((tmp= tab->table->file->extra(HA_EXTRA_NO_CACHE)))
tab->table->file->print_error(tmp, MYF(0));
}
}
delete tab->filesort_result;
tab->filesort_result= NULL;
tab->partial_cleanup();
}
}
}
@ -29035,6 +29018,40 @@ void JOIN::handle_implicit_grouping_with_window_funcs()
}
/*
@brief
Perform a partial cleanup for the JOIN_TAB structure
@note
this is used to cleanup resources for the re-execution of correlated
subqueries.
*/
void JOIN_TAB::partial_cleanup()
{
if (!table)
return;
if (table->is_created())
{
table->file->ha_index_or_rnd_end();
DBUG_PRINT("info", ("close index: %s.%s alias: %s",
table->s->db.str,
table->s->table_name.str,
table->alias.c_ptr()));
if (aggr)
{
int tmp= 0;
if ((tmp= table->file->extra(HA_EXTRA_NO_CACHE)))
table->file->print_error(tmp, MYF(0));
}
}
delete filesort_result;
filesort_result= NULL;
free_cache(&read_record);
}
/**
@brief
Look for provision of the select_handler interface by a foreign engine

View File

@ -673,6 +673,8 @@ typedef struct st_join_table {
bool use_order() const; ///< Use ordering provided by chosen index?
bool sort_table();
bool remove_duplicates();
void partial_cleanup();
void add_keyuses_for_splitting();
SplM_plan_info *choose_best_splitting(double record_count,
table_map remaining_tables);

View File

@ -4620,7 +4620,7 @@ fill_schema_table_by_open(THD *thd, MEM_ROOT *mem_root,
Again we don't do this for SHOW COLUMNS/KEYS because
of backward compatibility.
*/
if (!is_show_fields_or_keys && result &&
if (!is_show_fields_or_keys && result && thd->is_error() &&
(thd->get_stmt_da()->sql_errno() == ER_NO_SUCH_TABLE ||
thd->get_stmt_da()->sql_errno() == ER_WRONG_OBJECT ||
thd->get_stmt_da()->sql_errno() == ER_NOT_SEQUENCE))
@ -5932,12 +5932,12 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
I.e. we are in SELECT FROM INFORMATION_SCHEMA.COLUMS
rather than in SHOW COLUMNS
*/
convert_error_to_warning(thd);
if (thd->is_error())
convert_error_to_warning(thd);
res= 0;
}
DBUG_RETURN(res);
}
show_table= tables->table;
count= 0;
ptr= show_table->field;

View File

@ -183,6 +183,17 @@ bool Binary_string::set_hex(const char *str, uint32 len)
}
bool Binary_string::set_fcvt(double num, uint decimals)
{
// Assert that `decimals` is small enough to fit into FLOATING_POINT_BUFFER
DBUG_ASSERT(decimals < DECIMAL_NOT_SPECIFIED);
if (alloc(FLOATING_POINT_BUFFER))
return true;
length(my_fcvt(num, decimals, Ptr, NULL));
return false;
}
bool String::set_real(double num,uint decimals, CHARSET_INFO *cs)
{
char buff[FLOATING_POINT_BUFFER];

View File

@ -524,6 +524,7 @@ public:
bool set_hex(ulonglong num);
bool set_hex(const char *str, uint32 len);
bool set_fcvt(double num, uint decimals);
bool copy(); // Alloc string if not alloced
bool copy(const Binary_string &s); // Allocate new string
@ -781,6 +782,11 @@ public:
bool set(longlong num, CHARSET_INFO *cs) { return set_int(num, false, cs); }
bool set(ulonglong num, CHARSET_INFO *cs) { return set_int((longlong)num, true, cs); }
bool set_real(double num,uint decimals, CHARSET_INFO *cs);
bool set_fcvt(double num, uint decimals)
{
set_charset(&my_charset_latin1);
return Binary_string::set_fcvt(num, decimals);
}
bool set_hex(ulonglong num)
{

View File

@ -4647,6 +4647,7 @@ bool Type_handler_temporal_result::
Item_func_min_max_fix_attributes(THD *thd, Item_func_min_max *func,
Item **items, uint nitems) const
{
DBUG_ASSERT(func->field_type() != MYSQL_TYPE_DATE);
bool rc= Type_handler::Item_func_min_max_fix_attributes(thd, func,
items, nitems);
bool is_time= func->field_type() == MYSQL_TYPE_TIME;
@ -4701,7 +4702,6 @@ bool Type_handler_temporal_result::
DATETIME DATETIME no conversion
DATETIME TIMESTAMP safe conversion
DATETIME DATE safe conversion
DATE DATE no conversion
TIME TIME no conversion
Note, a function cannot return TIMESTAMP if it has non-TIMESTAMP
@ -4718,9 +4718,6 @@ bool Type_handler_temporal_result::
-------------------- ------------- -------
TIMESTAMP TIME Not possible
DATETIME TIME depends on OLD_MODE_ZERO_DATE_TIME_CAST
DATE TIMESTAMP Not possible
DATE DATETIME Not possible
DATE TIME Not possible
TIME TIMESTAMP Not possible
TIME DATETIME Not possible
TIME DATE Not possible
@ -4743,6 +4740,30 @@ bool Type_handler_temporal_result::
}
bool Type_handler_date_common::
Item_func_min_max_fix_attributes(THD *thd, Item_func_min_max *func,
Item **items, uint nitems) const
{
func->fix_attributes_date();
if (func->maybe_null)
return false;
/*
We cannot trust the generic maybe_null value calculated during fix_fields().
If a conversion from non-temoral types to DATE happens,
then the result can be NULL (even if all arguments are not NULL).
*/
for (uint i= 0; i < nitems; i++)
{
if (items[i]->type_handler()->cmp_type() != TIME_RESULT)
{
func->maybe_null= true;
break;
}
}
return false;
}
bool Type_handler_real_result::
Item_func_min_max_fix_attributes(THD *thd, Item_func_min_max *func,
Item **items, uint nitems) const

View File

@ -6145,8 +6145,11 @@ public:
const char *name,
Type_handler_hybrid_field_type *,
Type_all_attributes *atrr,
Item **items, uint nitems)
const override;
Item **items, uint nitems) const
override;
bool Item_func_min_max_fix_attributes(THD *thd, Item_func_min_max *func,
Item **items, uint nitems) const
override;
void Item_param_set_param_func(Item_param *param,
uchar **pos, ulong len) const override;
};

View File

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2017, Oracle and/or its affiliates.
Copyright (c) 2010, 2017, Corporation
Copyright (c) 2010, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -1364,6 +1364,25 @@ bool st_select_lex_unit::prepare(TABLE_LIST *derived_arg,
found_rows_for_union= first_sl->options & OPTION_FOUND_ROWS;
is_union_select= is_unit_op() || fake_select_lex || single_tvc;
/*
If we are reading UNION output and the UNION is in the
IN/ANY/ALL/EXISTS subquery, then ORDER BY is redundant and hence should
be removed.
Example:
select ... col IN (select col2 FROM t1 union select col3 from t2 ORDER BY 1)
(as for ORDER BY ... LIMIT, it currently not supported inside
IN/ALL/ANY subqueries)
(For non-UNION this removal of ORDER BY clause is done in
check_and_do_in_subquery_rewrites())
*/
if (item && is_unit_op() &&
(item->is_in_predicate() || item->is_exists_predicate()))
{
global_parameters()->order_list.first= NULL;
global_parameters()->order_list.elements= 0;
}
/* will only optimize once */
if (!bag_set_op_optimized && !is_recursive)
{
@ -1390,6 +1409,7 @@ bool st_select_lex_unit::prepare(TABLE_LIST *derived_arg,
break;
}
}
/* Global option */
if (is_union_select || is_recursive)

View File

@ -1388,9 +1388,16 @@ public:
/* number of select if it is derived table */
uint derived_select_number;
/*
0 or JOIN_TYPE_{LEFT|RIGHT}. Currently this is only compared to 0.
If maybe_null !=0, this table is inner w.r.t. some outer join operation,
and null_row may be true.
Possible values:
- 0 by default
- JOIN_TYPE_{LEFT|RIGHT} if the table is inner w.r.t an outer join
operation
- 1 if the SELECT has mixed_implicit_grouping=1. example:
select max(col1), col2 from t1. In this case, the query produces
one row with all columns having NULL values.
Interpetation: If maybe_null!=0, all fields of the table are considered
NULLable (and have NULL values when null_row=true)
*/
uint maybe_null;
int current_lock; /* Type of lock on table */

View File

@ -2719,6 +2719,7 @@ main(int argc, char **argv)
}
if (opt_skip_write_binlog)
{
/* If skip_write_binlog is set and wsrep is compiled in we disable
sql_log_bin and wsrep_on to avoid Galera replicating below
truncate table clauses. This will allow user to set different
@ -2726,15 +2727,9 @@ main(int argc, char **argv)
printf("set @prep1=if((select count(*) from information_schema.global_variables where variable_name='wsrep_on' and variable_value='ON'), 'SET SESSION SQL_LOG_BIN=?, WSREP_ON=OFF;', 'do ?');\n"
"prepare set_wsrep_write_binlog from @prep1;\n"
"set @toggle=0; execute set_wsrep_write_binlog using @toggle;\n");
if (argc == 1 && !opt_leap)
}
else
{
/* Argument is timezonedir */
root_name_end= strmake_buf(fullname, argv[0]);
if(!opt_skip_write_binlog)
{
// Alter time zone tables to InnoDB if wsrep_on is enabled
// to allow changes to them to replicate with Galera
printf("\\d |\n"
@ -2746,7 +2741,13 @@ main(int argc, char **argv)
"ALTER TABLE time_zone_transition_type ENGINE=InnoDB;\n"
"END IF|\n"
"\\d ;\n");
}
}
if (argc == 1 && !opt_leap)
{
/* Argument is timezonedir */
root_name_end= strmake_buf(fullname, argv[0]);
printf("TRUNCATE TABLE time_zone;\n");
printf("TRUNCATE TABLE time_zone_name;\n");

View File

@ -41,9 +41,6 @@ Modified Jan Lindström jan.lindstrom@mariadb.com
#include "fil0pagecompress.h"
#include <my_crypt.h>
/** Mutex for keys */
static ib_mutex_t fil_crypt_key_mutex;
static bool fil_crypt_threads_inited = false;
/** Is encryption enabled/disabled */
@ -105,8 +102,6 @@ UNIV_INTERN
void
fil_space_crypt_init()
{
mutex_create(LATCH_ID_FIL_CRYPT_MUTEX, &fil_crypt_key_mutex);
fil_crypt_throttle_sleep_event = os_event_create(0);
mutex_create(LATCH_ID_FIL_CRYPT_STAT_MUTEX, &crypt_stat_mutex);
@ -120,7 +115,6 @@ void
fil_space_crypt_cleanup()
{
os_event_destroy(fil_crypt_throttle_sleep_event);
mutex_free(&fil_crypt_key_mutex);
mutex_free(&crypt_stat_mutex);
}
@ -1455,6 +1449,94 @@ fil_crypt_return_iops(
fil_crypt_update_total_stat(state);
}
/** Return the next tablespace from rotation_list.
@param space previous tablespace (NULL to start from the start)
@param recheck whether the removal condition needs to be rechecked after
the encryption parameters were changed
@param encrypt expected state of innodb_encrypt_tables
@return the next tablespace to process (n_pending_ops incremented)
@retval NULL if this was the last */
inline fil_space_t *fil_system_t::keyrotate_next(fil_space_t *space,
bool recheck, bool encrypt)
{
ut_ad(mutex_own(&mutex));
sized_ilist<fil_space_t, rotation_list_tag_t>::iterator it=
space ? space : rotation_list.begin();
const sized_ilist<fil_space_t, rotation_list_tag_t>::iterator end=
rotation_list.end();
if (space)
{
while (++it != end && (!UT_LIST_GET_LEN(it->chain) || it->is_stopping()));
/* If one of the encryption threads already started the encryption
of the table then don't remove the unencrypted spaces from rotation list
If there is a change in innodb_encrypt_tables variables value then
don't remove the last processed tablespace from the rotation list. */
space->release();
if (!space->referenced() &&
(!recheck || space->crypt_data) && !encrypt == !srv_encrypt_tables &&
space->is_in_rotation_list)
{
ut_a(!rotation_list.empty());
rotation_list.remove(*space);
space->is_in_rotation_list= false;
}
}
if (it == end)
return NULL;
space= &*it;
space->acquire();
return space;
}
/** Return the next tablespace.
@param space previous tablespace (NULL to start from the beginning)
@param recheck whether the removal condition needs to be rechecked after
the encryption parameters were changed
@param encrypt expected state of innodb_encrypt_tables
@return pointer to the next tablespace (with n_pending_ops incremented)
@retval NULL if this was the last */
static fil_space_t *fil_space_next(fil_space_t *space, bool recheck,
bool encrypt)
{
mutex_enter(&fil_system.mutex);
if (!srv_fil_crypt_rotate_key_age)
space= fil_system.keyrotate_next(space, recheck, encrypt);
else if (!space)
{
space= UT_LIST_GET_FIRST(fil_system.space_list);
/* We can trust that space is not NULL because at least the
system tablespace is always present and loaded first. */
space->acquire();
}
else
{
/* Move on to the next fil_space_t */
space->release();
space= UT_LIST_GET_NEXT(space_list, space);
/* Skip abnormal tablespaces or those that are being created by
fil_ibd_create(), or being dropped. */
while (space &&
(UT_LIST_GET_LEN(space->chain) == 0 ||
space->is_stopping() || space->purpose != FIL_TYPE_TABLESPACE))
space= UT_LIST_GET_NEXT(space_list, space);
if (space)
space->acquire();
}
mutex_exit(&fil_system.mutex);
return space;
}
/** Search for a space needing rotation
@param[in,out] key_state Key state
@param[in,out] state Rotation state
@ -1487,13 +1569,8 @@ static bool fil_crypt_find_space_to_rotate(
state->space = NULL;
}
/* If key rotation is enabled (default) we iterate all tablespaces.
If key rotation is not enabled we iterate only the tablespaces
added to keyrotation list. */
state->space = srv_fil_crypt_rotate_key_age
? fil_space_next(state->space)
: fil_system.keyrotate_next(state->space, *recheck,
key_state->key_version);
state->space = fil_space_next(state->space, *recheck,
key_state->key_version != 0);
while (!state->should_shutdown() && state->space) {
/* If there is no crypt data and we have not yet read
@ -1511,13 +1588,16 @@ static bool fil_crypt_find_space_to_rotate(
return true;
}
state->space = srv_fil_crypt_rotate_key_age
? fil_space_next(state->space)
: fil_system.keyrotate_next(state->space, *recheck,
key_state->key_version);
state->space = fil_space_next(state->space, *recheck,
key_state->key_version != 0);
}
/* if we didn't find any space return iops */
if (state->space) {
state->space->release();
state->space = NULL;
}
/* no work to do; release our allocation of I/O capacity */
fil_crypt_return_iops(state);
return false;
@ -2172,13 +2252,11 @@ static void fil_crypt_rotation_list_fill()
if (!space->size) {
/* Protect the tablespace while we may
release fil_system.mutex. */
space->n_pending_ops++;
#ifndef DBUG_OFF
ut_d(space->acquire());
ut_d(const fil_space_t* s=)
fil_system.read_page0(space->id);
ut_ad(!s || s == space);
#endif
space->n_pending_ops--;
ut_d(space->release());
if (!space->size) {
/* Page 0 was not loaded.
Skip this tablespace. */

View File

@ -4395,120 +4395,6 @@ test_make_filepath()
#endif /* UNIV_ENABLE_UNIT_TEST_MAKE_FILEPATH */
/* @} */
/** Return the next fil_space_t.
Once started, the caller must keep calling this until it returns NULL.
fil_space_t::acquire() and fil_space_t::release() are invoked here which
blocks a concurrent operation from dropping the tablespace.
@param[in] prev_space Pointer to the previous fil_space_t.
If NULL, use the first fil_space_t on fil_system.space_list.
@return pointer to the next fil_space_t.
@retval NULL if this was the last*/
fil_space_t*
fil_space_next(fil_space_t* prev_space)
{
fil_space_t* space=prev_space;
mutex_enter(&fil_system.mutex);
if (!space) {
space = UT_LIST_GET_FIRST(fil_system.space_list);
} else {
ut_a(space->referenced());
/* Move on to the next fil_space_t */
space->release();
space = UT_LIST_GET_NEXT(space_list, space);
}
/* Skip spaces that are being created by
fil_ibd_create(), or dropped, or !tablespace. */
while (space != NULL
&& (UT_LIST_GET_LEN(space->chain) == 0
|| space->is_stopping()
|| space->purpose != FIL_TYPE_TABLESPACE)) {
space = UT_LIST_GET_NEXT(space_list, space);
}
if (space != NULL) {
space->acquire();
}
mutex_exit(&fil_system.mutex);
return(space);
}
/**
Remove space from key rotation list if there are no more
pending operations.
@param[in,out] space Tablespace */
static
void
fil_space_remove_from_keyrotation(fil_space_t* space)
{
ut_ad(mutex_own(&fil_system.mutex));
ut_ad(space);
if (!space->referenced() && space->is_in_rotation_list) {
space->is_in_rotation_list = false;
ut_a(!fil_system.rotation_list.empty());
fil_system.rotation_list.remove(*space);
}
}
/** Return the next fil_space_t from key rotation list.
Once started, the caller must keep calling this until it returns NULL.
fil_space_t::acquire() and fil_space_t::release() are invoked here which
blocks a concurrent operation from dropping the tablespace.
@param[in] prev_space Pointer to the previous fil_space_t.
If NULL, use the first fil_space_t on fil_system.space_list.
@param[in] recheck recheck of the tablespace is needed or
still encryption thread does write page0 for it
@param[in] key_version key version of the key state thread
@return pointer to the next fil_space_t.
@retval NULL if this was the last */
fil_space_t *fil_system_t::keyrotate_next(fil_space_t *prev_space,
bool recheck, uint key_version)
{
mutex_enter(&fil_system.mutex);
/* If one of the encryption threads already started the encryption
of the table then don't remove the unencrypted spaces from rotation list
If there is a change in innodb_encrypt_tables variables value then
don't remove the last processed tablespace from the rotation list. */
const bool remove= (!recheck || prev_space->crypt_data) &&
!key_version == !srv_encrypt_tables;
sized_ilist<fil_space_t, rotation_list_tag_t>::iterator it=
prev_space ? prev_space : fil_system.rotation_list.end();
if (it == fil_system.rotation_list.end())
it= fil_system.rotation_list.begin();
else
{
/* Move on to the next fil_space_t */
prev_space->release();
++it;
while (it != fil_system.rotation_list.end() &&
(UT_LIST_GET_LEN(it->chain) == 0 || it->is_stopping()))
++it;
if (remove)
fil_space_remove_from_keyrotation(prev_space);
}
fil_space_t *space= it == fil_system.rotation_list.end() ? NULL : &*it;
if (space)
space->acquire();
mutex_exit(&fil_system.mutex);
return space;
}
/** Determine the block size of the data file.
@param[in] space tablespace
@param[in] offset page number

View File

@ -1308,24 +1308,15 @@ public:
@retval NULL if the tablespace does not exist or cannot be read */
fil_space_t* read_page0(ulint id);
/** Return the next fil_space_t from key rotation list.
Once started, the caller must keep calling this until it returns NULL.
fil_space_acquire() and fil_space_t::release() are invoked here, which
blocks a concurrent operation from dropping the tablespace.
@param[in] prev_space Previous tablespace or NULL to start
from beginning of fil_system->rotation
list
@param[in] recheck recheck of the tablespace is needed or
still encryption thread does write page0
for it
@param[in] key_version key version of the key state thread
If NULL, use the first fil_space_t on fil_system->space_list.
@return pointer to the next fil_space_t.
@retval NULL if this was the last */
fil_space_t* keyrotate_next(
fil_space_t* prev_space,
bool remove,
uint key_version);
/** Return the next tablespace from rotation_list.
@param space previous tablespace (NULL to start from the start)
@param recheck whether the removal condition needs to be rechecked after
the encryption parameters were changed
@param encrypt expected state of innodb_encrypt_tables
@return the next tablespace to process (n_pending_ops incremented)
@retval NULL if this was the last */
inline fil_space_t* keyrotate_next(fil_space_t *space, bool recheck,
bool encrypt);
};
/** The tablespace memory cache. */
@ -1493,33 +1484,6 @@ when it could be dropped concurrently.
fil_space_t*
fil_space_acquire_for_io(ulint id);
/** Return the next fil_space_t.
Once started, the caller must keep calling this until it returns NULL.
fil_space_acquire() and fil_space_t::release() are invoked here which
blocks a concurrent operation from dropping the tablespace.
@param[in,out] prev_space Pointer to the previous fil_space_t.
If NULL, use the first fil_space_t on fil_system.space_list.
@return pointer to the next fil_space_t.
@retval NULL if this was the last */
fil_space_t*
fil_space_next(
fil_space_t* prev_space)
MY_ATTRIBUTE((warn_unused_result));
/** Return the next fil_space_t from key rotation list.
Once started, the caller must keep calling this until it returns NULL.
fil_space_acquire() and fil_space_t::release() are invoked here which
blocks a concurrent operation from dropping the tablespace.
@param[in,out] prev_space Pointer to the previous fil_space_t.
If NULL, use the first fil_space_t on fil_system.space_list.
@param[in] remove Whether to remove the previous tablespace from
the rotation list
@return pointer to the next fil_space_t.
@retval NULL if this was the last*/
fil_space_t*
fil_space_keyrotate_next(fil_space_t* prev_space, bool remove)
MY_ATTRIBUTE((warn_unused_result));
/** Replay a file rename operation if possible.
@param[in] space_id tablespace identifier
@param[in] name old file name

View File

@ -357,7 +357,6 @@ enum latch_id_t {
LATCH_ID_SCRUB_STAT_MUTEX,
LATCH_ID_DEFRAGMENT_MUTEX,
LATCH_ID_BTR_DEFRAGMENT_MUTEX,
LATCH_ID_FIL_CRYPT_MUTEX,
LATCH_ID_FIL_CRYPT_STAT_MUTEX,
LATCH_ID_FIL_CRYPT_DATA_MUTEX,
LATCH_ID_FIL_CRYPT_THREADS_MUTEX,

View File

@ -730,7 +730,7 @@ lock_rec_has_to_wait(
/* if BF thread is locking and has conflict with another BF
thread, we need to look at trx ordering and lock types */
if (wsrep_thd_is_BF(trx->mysql_thd, FALSE)
&& wsrep_thd_is_BF(lock2->trx->mysql_thd, TRUE)) {
&& wsrep_thd_is_BF(lock2->trx->mysql_thd, FALSE)) {
mtr_t mtr;
if (UNIV_UNLIKELY(wsrep_debug)) {
@ -1078,7 +1078,7 @@ wsrep_kill_victim(
return;
}
my_bool bf_other = wsrep_thd_is_BF(lock->trx->mysql_thd, TRUE);
my_bool bf_other = wsrep_thd_is_BF(lock->trx->mysql_thd, FALSE);
mtr_t mtr;
if ((!bf_other) ||
@ -1402,7 +1402,7 @@ lock_rec_create_low(
lock_t *hash = (lock_t *)c_lock->hash;
lock_t *prev = NULL;
while (hash && wsrep_thd_is_BF(hash->trx->mysql_thd, TRUE)
while (hash && wsrep_thd_is_BF(hash->trx->mysql_thd, FALSE)
&& wsrep_thd_order_before(hash->trx->mysql_thd,
trx->mysql_thd)) {
prev = hash;
@ -1798,11 +1798,9 @@ lock_rec_add_to_queue(
= lock_rec_other_has_expl_req(
mode, block, false, heap_no, trx);
#ifdef WITH_WSREP
//ut_a(!other_lock || (wsrep_thd_is_BF(trx->mysql_thd, FALSE) &&
// wsrep_thd_is_BF(other_lock->trx->mysql_thd, TRUE)));
if (other_lock && trx->is_wsrep() &&
!wsrep_thd_is_BF(trx->mysql_thd, FALSE) &&
!wsrep_thd_is_BF(other_lock->trx->mysql_thd, TRUE)) {
!wsrep_thd_is_BF(other_lock->trx->mysql_thd, FALSE)) {
ib::info() << "WSREP BF lock conflict for my lock:\n BF:" <<
((wsrep_thd_is_BF(trx->mysql_thd, FALSE)) ? "BF" : "normal") << " exec: " <<
@ -2013,6 +2011,7 @@ lock_rec_has_to_wait_in_queue(
ulint bit_offset;
hash_table_t* hash;
ut_ad(wait_lock);
ut_ad(lock_mutex_own());
ut_ad(lock_get_wait(wait_lock));
ut_ad(lock_get_type_low(wait_lock) == LOCK_REC);
@ -2027,9 +2026,11 @@ lock_rec_has_to_wait_in_queue(
hash = lock_hash_get(wait_lock->type_mode);
for (lock = lock_rec_get_first_on_page_addr(hash, space, page_no);
#ifdef WITH_WSREP
lock &&
#endif
lock != wait_lock;
lock = lock_rec_get_next_on_page_const(lock)) {
const byte* p = (const byte*) &lock[1];
if (heap_no < lock_rec_get_n_bits(lock)
@ -2037,7 +2038,8 @@ lock_rec_has_to_wait_in_queue(
&& lock_has_to_wait(wait_lock, lock)) {
#ifdef WITH_WSREP
if (wsrep_thd_is_BF(wait_lock->trx->mysql_thd, FALSE) &&
wsrep_thd_is_BF(lock->trx->mysql_thd, TRUE)) {
wsrep_thd_is_BF(lock->trx->mysql_thd, FALSE)) {
if (UNIV_UNLIKELY(wsrep_debug)) {
mtr_t mtr;
ib::info() << "WSREP: waiting BF trx: " << ib::hex(wait_lock->trx->id)
@ -6565,7 +6567,7 @@ DeadlockChecker::select_victim() const
/* The joining transaction is 'smaller',
choose it as the victim and roll it back. */
#ifdef WITH_WSREP
if (wsrep_thd_is_BF(m_start->mysql_thd, TRUE)) {
if (wsrep_thd_is_BF(m_start->mysql_thd, FALSE)) {
return(m_wait_lock->trx);
}
#endif /* WITH_WSREP */
@ -6573,7 +6575,7 @@ DeadlockChecker::select_victim() const
}
#ifdef WITH_WSREP
if (wsrep_thd_is_BF(m_wait_lock->trx->mysql_thd, TRUE)) {
if (wsrep_thd_is_BF(m_wait_lock->trx->mysql_thd, FALSE)) {
return(m_start);
}
#endif /* WITH_WSREP */

View File

@ -1449,8 +1449,6 @@ sync_latch_meta_init()
PFS_NOT_INSTRUMENTED);
LATCH_ADD_MUTEX(BTR_DEFRAGMENT_MUTEX, SYNC_NO_ORDER_CHECK,
PFS_NOT_INSTRUMENTED);
LATCH_ADD_MUTEX(FIL_CRYPT_MUTEX, SYNC_NO_ORDER_CHECK,
PFS_NOT_INSTRUMENTED);
LATCH_ADD_MUTEX(FIL_CRYPT_STAT_MUTEX, SYNC_NO_ORDER_CHECK,
PFS_NOT_INSTRUMENTED);
LATCH_ADD_MUTEX(FIL_CRYPT_DATA_MUTEX, SYNC_NO_ORDER_CHECK,

View File

@ -812,6 +812,24 @@ internal_str2dec(const char *from, decimal_t *to, char **end, my_bool fixed)
while (s < end_of_string && my_isdigit(&my_charset_latin1, *s))
s++;
intg= (int) (s-s1);
/*
If the integer part is long enough and it has multiple leading zeros,
let's trim them, so this expression can return 1 without overflowing:
CAST(CONCAT(REPEAT('0',90),'1') AS DECIMAL(10))
*/
if (intg > DIG_PER_DEC1 && s1[0] == '0' && s1[1] == '0')
{
/*
Keep at least one digit, to avoid an empty string.
So we trim '0000' to '0' rather than to ''.
Otherwise the below code (converting digits to to->buf)
would fail on a fatal error.
*/
const char *iend= s - 1;
for ( ; s1 < iend && *s1 == '0'; s1++)
{ }
intg= (int) (s-s1);
}
if (s < end_of_string && *s=='.')
{
endp= s+1;

View File

@ -78,6 +78,7 @@ static my_bool has_no_data(Vio *vio __attribute__((unused)))
#ifdef _WIN32
int vio_pipe_shutdown(Vio *vio, int how)
{
vio->shutdown_flag= how;
return CancelIoEx(vio->hPipe, NULL);
}
#endif

View File

@ -75,6 +75,9 @@ size_t vio_read_pipe(Vio *vio, uchar *buf, size_t count)
size_t ret= (size_t) -1;
DBUG_ENTER("vio_read_pipe");
if (vio->shutdown_flag)
return ret;
disable_iocp_notification(&vio->overlapped);
/* Attempt to read from the pipe (overlapped I/O). */
@ -85,8 +88,11 @@ size_t vio_read_pipe(Vio *vio, uchar *buf, size_t count)
}
/* Read operation is pending completion asynchronously? */
else if (GetLastError() == ERROR_IO_PENDING)
{
if (vio->shutdown_flag)
CancelIo(vio->hPipe);
ret= wait_overlapped_result(vio, vio->read_timeout);
}
enable_iocp_notification(&vio->overlapped);
DBUG_RETURN(ret);
@ -99,6 +105,8 @@ size_t vio_write_pipe(Vio *vio, const uchar *buf, size_t count)
size_t ret= (size_t) -1;
DBUG_ENTER("vio_write_pipe");
if (vio->shutdown_flag == SHUT_RDWR)
return ret;
disable_iocp_notification(&vio->overlapped);
/* Attempt to write to the pipe (overlapped I/O). */
if (WriteFile(vio->hPipe, buf, (DWORD)count, &transferred, &vio->overlapped))
@ -108,8 +116,11 @@ size_t vio_write_pipe(Vio *vio, const uchar *buf, size_t count)
}
/* Write operation is pending completion asynchronously? */
else if (GetLastError() == ERROR_IO_PENDING)
{
if (vio->shutdown_flag == SHUT_RDWR)
CancelIo(vio->hPipe);
ret= wait_overlapped_result(vio, vio->write_timeout);
}
enable_iocp_notification(&vio->overlapped);
DBUG_RETURN(ret);
}
@ -129,7 +140,6 @@ int vio_close_pipe(Vio *vio)
BOOL ret;
DBUG_ENTER("vio_close_pipe");
CancelIo(vio->hPipe);
CloseHandle(vio->overlapped.hEvent);
ret= CloseHandle(vio->hPipe);