Merge branch '10.3' into 10.4

This commit is contained in:
Oleksandr Byelkin 2020-12-25 09:13:28 +01:00
commit 478b83032b
112 changed files with 1838 additions and 1257 deletions

View File

@ -5776,6 +5776,10 @@ static bool xtrabackup_prepare_func(char** argv)
ut_ad(inc_dir_tables_hash); ut_ad(inc_dir_tables_hash);
} }
msg("open files limit requested %u, set to %u",
(uint) xb_open_files_limit,
xb_set_max_open_files(xb_open_files_limit));
/* Fix DDL for prepare. Process .del,.ren, and .new files. /* Fix DDL for prepare. Process .del,.ren, and .new files.
The order in which files are processed, is important The order in which files are processed, is important
(see MDEV-18185, MDEV-18201) (see MDEV-18185, MDEV-18201)

View File

@ -158,7 +158,9 @@ typedef struct st_mysql_ftparser_boolean_info
the word to MySQL full-text index. When parsing a search query, the word to MySQL full-text index. When parsing a search query,
this function will add the new word to the list of words to search this function will add the new word to the list of words to search
for. The boolean_info argument can be NULL for all cases except for. The boolean_info argument can be NULL for all cases except
when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO. when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO. A plugin can replace this
callback to post-process every parsed word before passing it to the original
mysql_add_word function.
ftparser_state: A generic pointer. The plugin can set it to point ftparser_state: A generic pointer. The plugin can set it to point
to information to be used internally for its own purposes. to information to be used internally for its own purposes.

View File

@ -1587,7 +1587,7 @@ drop table t1;
--echo # --echo #
--echo # Check strnxfrm() with odd length --echo # Check strnxfrm() with odd length
--echo # --echo #
set max_sort_length=9; set max_sort_length=65;
select @@max_sort_length; select @@max_sort_length;
eval create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine $engine; eval create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine $engine;
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');

View File

@ -4397,7 +4397,7 @@ with t as (select * from t1 where a <=3)
select * from t; select * from t;
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `t1`.`a` AS `a` from `t1` where `t1`.`a` <= 3)select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` <= 3)select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci
select * from v1; select * from v1;
a a
3 3
@ -4413,7 +4413,7 @@ order by a desc limit 3 )
select a from t1 where a=4 union select a from t where a=7; select a from t1 where a=4 union select a from t where a=7;
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `t1`.`a` AS `a` from `t1` where `t1`.`a` < 3 union select `t1`.`a` AS `a` from `t1` where `t1`.`a` > 3 order by `a` desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` < 3 union select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > 3 order by `a` desc limit 3)select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 latin1 latin1_swedish_ci
select * from v1; select * from v1;
a a
4 4
@ -4429,7 +4429,7 @@ order by a desc limit 3 )
(select a from t1 where a=4 union select a from t where a=7 order by a desc); (select a from t1 where a=4 union select a from t where a=7 order by a desc);
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as ((select `t1`.`a` AS `a` from `t1` where `t1`.`a` < 3) union (select `t1`.`a` AS `a` from `t1` where `t1`.`a` > 3) order by `a` desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as ((select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` < 3) union (select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > 3) order by `a` desc limit 3)select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
select * from v1; select * from v1;
a a
7 7
@ -4469,7 +4469,7 @@ order by 1 desc limit 3 )
select a from t1 where a=4 union select a from t where a=7 order by a desc; select a from t1 where a=4 union select a from t where a=7 order by a desc;
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as (values (2),(1) union (values (4),(7)) order by 1 desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as (values (2),(1) union (values (4),(7)) order by 1 desc limit 3)select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = 4 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
select * from v1; select * from v1;
a a
7 7
@ -4484,7 +4484,7 @@ order by 1 desc limit 3 )
select a from t1 where a=1 union select a from t where a=7 order by a desc; select a from t1 where a=1 union select a from t where a=7 order by a desc;
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as ((values (2),(1)) union (values (4),(7) order by 1 desc) order by 1 desc limit 3)select `t1`.`a` AS `a` from `t1` where `t1`.`a` = 1 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t(a) as ((values (2),(1)) union (values (4),(7) order by 1 desc) order by 1 desc limit 3)select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = 1 union select `t`.`a` AS `a` from `t` where `t`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
select * from v1; select * from v1;
a a
7 7
@ -4496,7 +4496,7 @@ s as (select * from t1 where a > 3)
select a from t where a=1 union select a from s where a=7 order by a desc; select a from t where a=1 union select a from s where a=7 order by a desc;
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `t1`.`a` AS `a` from `t1` where `t1`.`a` < 3), s as (select `t1`.`a` AS `a` from `t1` where `t1`.`a` > 3)select `t`.`a` AS `a` from `t` where `t`.`a` = 1 union select `s`.`a` AS `a` from `s` where `s`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` < 3), s as (select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > 3)select `t`.`a` AS `a` from `t` where `t`.`a` = 1 union select `s`.`a` AS `a` from `s` where `s`.`a` = 7 order by `a` desc latin1 latin1_swedish_ci
select * from v1; select * from v1;
a a
7 7

View File

@ -571,7 +571,7 @@ with t as (select a from t1 where b >= 'c')
select * from t2,t where t2.c=t.a; select * from t2,t where t2.c=t.a;
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `t1`.`a` AS `a` from `t1` where `t1`.`b` >= 'c')select `t2`.`c` AS `c`,`t`.`a` AS `a` from (`t2` join `t`) where `t2`.`c` = `t`.`a` latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with t as (select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`b` >= 'c')select `test`.`t2`.`c` AS `c`,`t`.`a` AS `a` from (`test`.`t2` join `t`) where `test`.`t2`.`c` = `t`.`a` latin1 latin1_swedish_ci
select * from v1; select * from v1;
c a c a
4 4 4 4
@ -588,7 +588,7 @@ with t as (select a, count(*) from t1 where b >= 'c' group by a)
select * from t2,t where t2.c=t.a; select * from t2,t where t2.c=t.a;
show create view v2; show create view v2;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS with t as (select `t1`.`a` AS `a`,count(0) AS `count(*)` from `t1` where `t1`.`b` >= 'c' group by `t1`.`a`)select `t2`.`c` AS `c`,`t`.`a` AS `a`,`t`.`count(*)` AS `count(*)` from (`t2` join `t`) where `t2`.`c` = `t`.`a` latin1 latin1_swedish_ci v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS with t as (select `test`.`t1`.`a` AS `a`,count(0) AS `count(*)` from `test`.`t1` where `test`.`t1`.`b` >= 'c' group by `test`.`t1`.`a`)select `test`.`t2`.`c` AS `c`,`t`.`a` AS `a`,`t`.`count(*)` AS `count(*)` from (`test`.`t2` join `t`) where `test`.`t2`.`c` = `t`.`a` latin1 latin1_swedish_ci
select * from v2; select * from v2;
c a count(*) c a count(*)
4 4 2 4 4 2
@ -606,7 +606,7 @@ with t(c) as (select a from t1 where b >= 'c')
select * from t r1 where r1.c=4; select * from t r1 where r1.c=4;
show create view v3; show create view v3;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS with t(c) as (select `t1`.`a` AS `c` from `t1` where `t1`.`b` >= 'c')select `r1`.`c` AS `c` from `t` `r1` where `r1`.`c` = 4 latin1 latin1_swedish_ci v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS with t(c) as (select `test`.`t1`.`a` AS `c` from `test`.`t1` where `test`.`t1`.`b` >= 'c')select `r1`.`c` AS `c` from `t` `r1` where `r1`.`c` = 4 latin1 latin1_swedish_ci
select * from v3; select * from v3;
c c
4 4
@ -1349,7 +1349,7 @@ r.r_regionkey in
select r_regionkey from t where r_name <> "ASIA"); select r_regionkey from t where r_name <> "ASIA");
show create view v; show create view v;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `n`.`n_nationkey` AS `n_nationkey`,`n`.`n_name` AS `n_name`,`n`.`n_regionkey` AS `n_regionkey`,`r`.`r_regionkey` AS `r_regionkey`,`r`.`r_name` AS `r_name` from (`nation` `n` join `region` `r`) where `n`.`n_regionkey` = `r`.`r_regionkey` and `r`.`r_regionkey` in (with t as (select `region`.`r_regionkey` AS `r_regionkey`,`region`.`r_name` AS `r_name` from `region` where `region`.`r_regionkey` <= 3)select `t`.`r_regionkey` from `t` where `t`.`r_name` <> 'ASIA') latin1 latin1_swedish_ci v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `n`.`n_nationkey` AS `n_nationkey`,`n`.`n_name` AS `n_name`,`n`.`n_regionkey` AS `n_regionkey`,`r`.`r_regionkey` AS `r_regionkey`,`r`.`r_name` AS `r_name` from (`test`.`nation` `n` join `test`.`region` `r`) where `n`.`n_regionkey` = `r`.`r_regionkey` and `r`.`r_regionkey` in (with t as (select `test`.`region`.`r_regionkey` AS `r_regionkey`,`test`.`region`.`r_name` AS `r_name` from `test`.`region` where `test`.`region`.`r_regionkey` <= 3)select `t`.`r_regionkey` from `t` where `t`.`r_name` <> 'ASIA') latin1 latin1_swedish_ci
select * from v; select * from v;
n_nationkey n_name n_regionkey r_regionkey r_name n_nationkey n_name n_regionkey r_regionkey r_name
0 ALGERIA 0 0 AFRICA 0 ALGERIA 0 0 AFRICA
@ -1690,6 +1690,41 @@ ERROR 3D000: No database selected
DROP TABLE test.t; DROP TABLE test.t;
connection default; connection default;
disconnect con1; disconnect con1;
#
# MDEV-22781: create view with CTE without default database
#
drop database test;
create database db1;
create table db1.t1 (a int);
insert into db1.t1 values (3),(7),(1);
create view db1.v1 as with t as (select * from db1.t1) select * from t;
show create view db1.v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `db1`.`v1` AS with t as (select `db1`.`t1`.`a` AS `a` from `db1`.`t1`)select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci
select * from db1.v1;
a
3
7
1
drop view db1.v1;
prepare stmt from "
create view db1.v1 as with t as (select * from db1.t1) select * from t;
";
execute stmt;
deallocate prepare stmt;
show create view db1.v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `db1`.`v1` AS with t as (select `db1`.`t1`.`a` AS `a` from `db1`.`t1`)select `t`.`a` AS `a` from `t` latin1 latin1_swedish_ci
select * from db1.v1;
a
3
7
1
drop view db1.v1;
drop table db1.t1;
drop database db1;
create database test;
use test;
# End of 10.2 tests # End of 10.2 tests
# #
# MDEV-21673: several references to CTE that uses # MDEV-21673: several references to CTE that uses

View File

@ -1201,6 +1201,35 @@ DROP TABLE test.t;
--connection default --connection default
--disconnect con1 --disconnect con1
--echo #
--echo # MDEV-22781: create view with CTE without default database
--echo #
drop database test;
create database db1;
create table db1.t1 (a int);
insert into db1.t1 values (3),(7),(1);
create view db1.v1 as with t as (select * from db1.t1) select * from t;
show create view db1.v1;
select * from db1.v1;
drop view db1.v1;
prepare stmt from "
create view db1.v1 as with t as (select * from db1.t1) select * from t;
";
execute stmt;
deallocate prepare stmt;
show create view db1.v1;
select * from db1.v1;
drop view db1.v1;
drop table db1.t1;
drop database db1;
create database test;
use test;
--echo # End of 10.2 tests --echo # End of 10.2 tests
--echo # --echo #

View File

@ -0,0 +1,48 @@
#
# MDEV-20751: query using many CTEs with grant_tables enabled
#
connection default;
CREATE DATABASE db;
USE db;
CREATE TABLE t1 (a int) ENGINE=MYISAM;
INSERT INTO t1 VALUES (3), (7), (1);
CREATE TABLE t2 (a int) ENGINE=MYISAM;
INSERT INTO t2 VALUES (2), (8), (4);
CREATE USER 'u1'@'localhost';
GRANT USAGE ON db.* TO 'u1'@'localhost';
GRANT SELECT ON db.t1 TO 'u1'@'localhost';
FLUSH PRIVILEGES;
connect u1,'localhost',u1,,;
connection u1;
USE db;
WITH
cte1 AS
(SELECT a FROM t1),
cte2 AS
(SELECT cte1.a FROM t1,cte1 WHERE cte1.a = t1.a),
cte3 AS
(SELECT cte2.a FROM t1,cte1,cte2 WHERE cte1.a = t1.a AND t1.a = cte2.a),
cte4 AS
(SELECT cte2.a FROM t1,cte2 WHERE cte2.a = t1.a)
SELECT * FROM cte4 as r;
a
3
7
1
WITH
cte1 AS
(SELECT a FROM t2),
cte2 AS
(SELECT cte1.a FROM t2,cte1 WHERE cte1.a = t2.a),
cte3 AS
(SELECT cte2.a FROM t2,cte1,cte2 WHERE cte1.a = t2.a AND t2.a = cte2.a),
cte4 AS
(SELECT cte2.a FROM t2,cte2 WHERE cte2.a = t2.a)
SELECT * FROM cte4 as r;
ERROR 42000: SELECT command denied to user 'u1'@'localhost' for table 't2'
disconnect u1;
connection default;
DROP USER 'u1'@'localhost';
DROP DATABASE db;
USE test;
# End of 10.2 tests

View File

@ -0,0 +1,58 @@
-- source include/not_embedded.inc
--echo #
--echo # MDEV-20751: query using many CTEs with grant_tables enabled
--echo #
--connection default
CREATE DATABASE db;
USE db;
CREATE TABLE t1 (a int) ENGINE=MYISAM;
INSERT INTO t1 VALUES (3), (7), (1);
CREATE TABLE t2 (a int) ENGINE=MYISAM;
INSERT INTO t2 VALUES (2), (8), (4);
CREATE USER 'u1'@'localhost';
GRANT USAGE ON db.* TO 'u1'@'localhost';
GRANT SELECT ON db.t1 TO 'u1'@'localhost';
FLUSH PRIVILEGES;
--connect (u1,'localhost',u1,,)
--connection u1
USE db;
WITH
cte1 AS
(SELECT a FROM t1),
cte2 AS
(SELECT cte1.a FROM t1,cte1 WHERE cte1.a = t1.a),
cte3 AS
(SELECT cte2.a FROM t1,cte1,cte2 WHERE cte1.a = t1.a AND t1.a = cte2.a),
cte4 AS
(SELECT cte2.a FROM t1,cte2 WHERE cte2.a = t1.a)
SELECT * FROM cte4 as r;
--error ER_TABLEACCESS_DENIED_ERROR
WITH
cte1 AS
(SELECT a FROM t2),
cte2 AS
(SELECT cte1.a FROM t2,cte1 WHERE cte1.a = t2.a),
cte3 AS
(SELECT cte2.a FROM t2,cte1,cte2 WHERE cte1.a = t2.a AND t2.a = cte2.a),
cte4 AS
(SELECT cte2.a FROM t2,cte2 WHERE cte2.a = t2.a)
SELECT * FROM cte4 as r;
--disconnect u1
--connection default
DROP USER 'u1'@'localhost';
DROP DATABASE db;
USE test;
--echo # End of 10.2 tests

View File

@ -818,7 +818,7 @@ where p.id = a.father or p.id = a.mother
select * from ancestors; select * from ancestors;
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with recursive ancestors as (select `folks`.`id` AS `id`,`folks`.`name` AS `name`,`folks`.`dob` AS `dob`,`folks`.`father` AS `father`,`folks`.`mother` AS `mother` from `folks` where `folks`.`name` = 'Me' and `folks`.`dob` = '2000-01-01' union select `p`.`id` AS `id`,`p`.`name` AS `name`,`p`.`dob` AS `dob`,`p`.`father` AS `father`,`p`.`mother` AS `mother` from (`folks` `p` join `ancestors` `a`) where `p`.`id` = `a`.`father` or `p`.`id` = `a`.`mother`)select `ancestors`.`id` AS `id`,`ancestors`.`name` AS `name`,`ancestors`.`dob` AS `dob`,`ancestors`.`father` AS `father`,`ancestors`.`mother` AS `mother` from `ancestors` latin1 latin1_swedish_ci v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS with recursive ancestors as (select `test`.`folks`.`id` AS `id`,`test`.`folks`.`name` AS `name`,`test`.`folks`.`dob` AS `dob`,`test`.`folks`.`father` AS `father`,`test`.`folks`.`mother` AS `mother` from `test`.`folks` where `test`.`folks`.`name` = 'Me' and `test`.`folks`.`dob` = '2000-01-01' union select `p`.`id` AS `id`,`p`.`name` AS `name`,`p`.`dob` AS `dob`,`p`.`father` AS `father`,`p`.`mother` AS `mother` from (`test`.`folks` `p` join `ancestors` `a`) where `p`.`id` = `a`.`father` or `p`.`id` = `a`.`mother`)select `ancestors`.`id` AS `id`,`ancestors`.`name` AS `name`,`ancestors`.`dob` AS `dob`,`ancestors`.`father` AS `father`,`ancestors`.`mother` AS `mother` from `ancestors` latin1 latin1_swedish_ci
select * from v1; select * from v1;
id name dob father mother id name dob father mother
100 Me 2000-01-01 20 30 100 Me 2000-01-01 20 30
@ -849,7 +849,7 @@ where p.id = ma.mother
select * from ancestors; select * from ancestors;
show create view v2; show create view v2;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS with recursive ancestors as (select `folks`.`id` AS `id`,`folks`.`name` AS `name`,`folks`.`dob` AS `dob`,`folks`.`father` AS `father`,`folks`.`mother` AS `mother` from `folks` where `folks`.`name` = 'Me' union select `p`.`id` AS `id`,`p`.`name` AS `name`,`p`.`dob` AS `dob`,`p`.`father` AS `father`,`p`.`mother` AS `mother` from (`folks` `p` join `ancestors` `fa`) where `p`.`id` = `fa`.`father` union select `p`.`id` AS `id`,`p`.`name` AS `name`,`p`.`dob` AS `dob`,`p`.`father` AS `father`,`p`.`mother` AS `mother` from (`folks` `p` join `ancestors` `ma`) where `p`.`id` = `ma`.`mother`)select `ancestors`.`id` AS `id`,`ancestors`.`name` AS `name`,`ancestors`.`dob` AS `dob`,`ancestors`.`father` AS `father`,`ancestors`.`mother` AS `mother` from `ancestors` latin1 latin1_swedish_ci v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS with recursive ancestors as (select `test`.`folks`.`id` AS `id`,`test`.`folks`.`name` AS `name`,`test`.`folks`.`dob` AS `dob`,`test`.`folks`.`father` AS `father`,`test`.`folks`.`mother` AS `mother` from `test`.`folks` where `test`.`folks`.`name` = 'Me' union select `p`.`id` AS `id`,`p`.`name` AS `name`,`p`.`dob` AS `dob`,`p`.`father` AS `father`,`p`.`mother` AS `mother` from (`test`.`folks` `p` join `ancestors` `fa`) where `p`.`id` = `fa`.`father` union select `p`.`id` AS `id`,`p`.`name` AS `name`,`p`.`dob` AS `dob`,`p`.`father` AS `father`,`p`.`mother` AS `mother` from (`test`.`folks` `p` join `ancestors` `ma`) where `p`.`id` = `ma`.`mother`)select `ancestors`.`id` AS `id`,`ancestors`.`name` AS `name`,`ancestors`.`dob` AS `dob`,`ancestors`.`father` AS `father`,`ancestors`.`mother` AS `mother` from `ancestors` latin1 latin1_swedish_ci
select * from v2; select * from v2;
id name dob father mother id name dob father mother
100 Me 2000-01-01 20 30 100 Me 2000-01-01 20 30
@ -4237,6 +4237,269 @@ a b c
deallocate prepare stmt; deallocate prepare stmt;
drop table t1; drop table t1;
# #
# MDEV-24019: query with recursive CTE when no default database is set
#
drop database test;
with recursive a as
(select 1 from dual union select * from a as r)
select * from a;
1
1
create database db1;
create table db1.t1 (a int);
insert into db1.t1 values (3), (7), (1);
with recursive cte as
(select * from db1.t1 union select * from (select * from cte) as t)
select * from cte;
a
3
7
1
explain with recursive cte as
(select * from db1.t1 union select * from (select * from cte) as t)
select * from cte;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 3
2 DERIVED t1 ALL NULL NULL NULL NULL 3
3 RECURSIVE UNION <derived2> ALL NULL NULL NULL NULL 3
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
prepare stmt from "with recursive cte as
(select * from db1.t1 union select * from (select * from cte) as t)
select * from cte";
execute stmt;
a
3
7
1
execute stmt;
a
3
7
1
deallocate prepare stmt;
drop database db1;
create database test;
use test;
#
# MDEV-23406: query with mutually recursive CTEs when big_tables=1
#
set @save_big_tables=@@big_tables;
set big_tables=1;
create table folks(id int, name char(32), dob date, father int, mother int);
insert into folks values
(100, 'Me', '2000-01-01', 20, 30),
(20, 'Dad', '1970-02-02', 10, 9),
(30, 'Mom', '1975-03-03', 8, 7),
(10, 'Grandpa Bill', '1940-04-05', null, null),
(9, 'Grandma Ann', '1941-10-15', null, null),
(25, 'Uncle Jim', '1968-11-18', 8, 7),
(98, 'Sister Amy', '2001-06-20', 20, 30),
(7, 'Grandma Sally', '1943-08-23', null, 6),
(8, 'Grandpa Ben', '1940-10-21', null, null),
(6, 'Grandgrandma Martha', '1923-05-17', null, null),
(67, 'Cousin Eddie', '1992-02-28', 25, 27),
(27, 'Auntie Melinda', '1971-03-29', null, null);
with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
union
select h.*, w.*
from folks v, folks h, folks w
where v.name = 'Me' and
(v.father = h.id AND v.mother= w.id)
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples;
h_name h_dob w_name w_dob
Dad 1970-02-02 Mom 1975-03-03
Grandpa Bill 1940-04-05 Grandma Ann 1941-10-15
Grandpa Ben 1940-10-21 Grandma Sally 1943-08-23
explain with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
union
select h.*, w.*
from folks v, folks h, folks w
where v.name = 'Me' and
(v.father = h.id AND v.mother= w.id)
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 1728
4 DERIVED <derived3> ALL NULL NULL NULL NULL 1728
5 RECURSIVE UNION <derived3> ALL NULL NULL NULL NULL 1728
NULL UNION RESULT <union4,5> ALL NULL NULL NULL NULL NULL
3 DERIVED v ALL NULL NULL NULL NULL 12 Using where
3 DERIVED h ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
3 DERIVED w ALL NULL NULL NULL NULL 12 Using where; Using join buffer (incremental, BNL join)
2 RECURSIVE UNION <derived4> ALL NULL NULL NULL NULL 2
2 RECURSIVE UNION h ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
2 RECURSIVE UNION w ALL NULL NULL NULL NULL 12 Using where; Using join buffer (incremental, BNL join)
NULL UNION RESULT <union3,2> ALL NULL NULL NULL NULL NULL
prepare stmt from "with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
union
select h.*, w.*
from folks v, folks h, folks w
where v.name = 'Me' and
(v.father = h.id AND v.mother= w.id)
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples";
execute stmt;
h_name h_dob w_name w_dob
Dad 1970-02-02 Mom 1975-03-03
Grandpa Bill 1940-04-05 Grandma Ann 1941-10-15
Grandpa Ben 1940-10-21 Grandma Sally 1943-08-23
execute stmt;
h_name h_dob w_name w_dob
Dad 1970-02-02 Mom 1975-03-03
Grandpa Bill 1940-04-05 Grandma Ann 1941-10-15
Grandpa Ben 1940-10-21 Grandma Sally 1943-08-23
deallocate prepare stmt;
with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select *
from folks
where name = 'Me'
union all
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union all
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples;
h_name h_dob w_name w_dob
Dad 1970-02-02 Mom 1975-03-03
Grandpa Bill 1940-04-05 Grandma Ann 1941-10-15
Grandpa Ben 1940-10-21 Grandma Sally 1943-08-23
explain with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select *
from folks
where name = 'Me'
union all
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union all
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2
3 DERIVED folks ALL NULL NULL NULL NULL 12 Using where
4 RECURSIVE UNION <derived2> ALL NULL NULL NULL NULL 2
5 RECURSIVE UNION <derived2> ALL NULL NULL NULL NULL 2
NULL UNION RESULT <union3,4,5> ALL NULL NULL NULL NULL NULL
2 DERIVED h ALL NULL NULL NULL NULL 12 Using where
2 DERIVED <derived3> ref key0 key0 5 test.h.id 2
2 DERIVED w ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
prepare stmt from "with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select *
from folks
where name = 'Me'
union all
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union all
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples";
execute stmt;
h_name h_dob w_name w_dob
Dad 1970-02-02 Mom 1975-03-03
Grandpa Bill 1940-04-05 Grandma Ann 1941-10-15
Grandpa Ben 1940-10-21 Grandma Sally 1943-08-23
execute stmt;
h_name h_dob w_name w_dob
Dad 1970-02-02 Mom 1975-03-03
Grandpa Bill 1940-04-05 Grandma Ann 1941-10-15
Grandpa Ben 1940-10-21 Grandma Sally 1943-08-23
deallocate prepare stmt;
drop table folks;
set big_tables=@save_big_tables;
#
# End of 10.2 tests # End of 10.2 tests
# #
# #

View File

@ -2725,6 +2725,135 @@ deallocate prepare stmt;
drop table t1; drop table t1;
--echo #
--echo # MDEV-24019: query with recursive CTE when no default database is set
--echo #
drop database test;
let $q=
with recursive a as
(select 1 from dual union select * from a as r)
select * from a;
eval $q;
create database db1;
create table db1.t1 (a int);
insert into db1.t1 values (3), (7), (1);
let $q=
with recursive cte as
(select * from db1.t1 union select * from (select * from cte) as t)
select * from cte;
eval $q;
eval explain $q;
eval prepare stmt from "$q";
execute stmt;
execute stmt;
deallocate prepare stmt;
drop database db1;
create database test;
use test;
--echo #
--echo # MDEV-23406: query with mutually recursive CTEs when big_tables=1
--echo #
set @save_big_tables=@@big_tables;
set big_tables=1;
create table folks(id int, name char(32), dob date, father int, mother int);
insert into folks values
(100, 'Me', '2000-01-01', 20, 30),
(20, 'Dad', '1970-02-02', 10, 9),
(30, 'Mom', '1975-03-03', 8, 7),
(10, 'Grandpa Bill', '1940-04-05', null, null),
(9, 'Grandma Ann', '1941-10-15', null, null),
(25, 'Uncle Jim', '1968-11-18', 8, 7),
(98, 'Sister Amy', '2001-06-20', 20, 30),
(7, 'Grandma Sally', '1943-08-23', null, 6),
(8, 'Grandpa Ben', '1940-10-21', null, null),
(6, 'Grandgrandma Martha', '1923-05-17', null, null),
(67, 'Cousin Eddie', '1992-02-28', 25, 27),
(27, 'Auntie Melinda', '1971-03-29', null, null);
let q=
with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
union
select h.*, w.*
from folks v, folks h, folks w
where v.name = 'Me' and
(v.father = h.id AND v.mother= w.id)
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples;
eval $q;
eval explain $q;
eval prepare stmt from "$q";
execute stmt;
execute stmt;
deallocate prepare stmt;
let $q=
with recursive
ancestor_couples(h_id, h_name, h_dob, h_father, h_mother,
w_id, w_name, w_dob, w_father, w_mother)
as
(
select h.*, w.*
from folks h, folks w, coupled_ancestors a
where a.father = h.id AND a.mother = w.id
),
coupled_ancestors (id, name, dob, father, mother)
as
(
select *
from folks
where name = 'Me'
union all
select h_id, h_name, h_dob, h_father, h_mother
from ancestor_couples
union all
select w_id, w_name, w_dob, w_father, w_mother
from ancestor_couples
)
select h_name, h_dob, w_name, w_dob
from ancestor_couples;
eval $q;
eval explain $q;
eval prepare stmt from "$q";
execute stmt;
execute stmt;
deallocate prepare stmt;
drop table folks;
set big_tables=@save_big_tables;
--echo # --echo #
--echo # End of 10.2 tests --echo # End of 10.2 tests
--echo # --echo #

View File

@ -1492,6 +1492,8 @@ ab
AE AE
AE AE
SET max_sort_length=8; SET max_sort_length=8;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8'
SELECT * FROM t1 ORDER BY s1; SELECT * FROM t1 ORDER BY s1;
s1 s1
ab ab

View File

@ -1765,6 +1765,8 @@ ab
AE AE
AE AE
SET max_sort_length=8; SET max_sort_length=8;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8'
SELECT * FROM t1 ORDER BY s1; SELECT * FROM t1 ORDER BY s1;
s1 s1
ab ab

View File

@ -1505,6 +1505,8 @@ ab
AE AE
AE AE
SET max_sort_length=8; SET max_sort_length=8;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8'
SELECT * FROM t1 ORDER BY s1; SELECT * FROM t1 ORDER BY s1;
s1 s1
ab ab

View File

@ -6757,9 +6757,11 @@ DFFFDFFF9CFF9DFF9EFF
# Checking strnxfrm() with odd length # Checking strnxfrm() with odd length
# #
set max_sort_length=9; set max_sort_length=9;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '9'
select @@max_sort_length; select @@max_sort_length;
@@max_sort_length @@max_sort_length
9 64
create table t1 (a varchar(128) character set utf8 collate utf8_general_ci); create table t1 (a varchar(128) character set utf8 collate utf8_general_ci);
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');
select * from t1 order by a; select * from t1 order by a;

View File

@ -2371,10 +2371,10 @@ drop table t1;
# #
# Check strnxfrm() with odd length # Check strnxfrm() with odd length
# #
set max_sort_length=9; set max_sort_length=65;
select @@max_sort_length; select @@max_sort_length;
@@max_sort_length @@max_sort_length
9 65
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci); create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci);
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');
select * from t1 order by a; select * from t1 order by a;

View File

@ -1520,7 +1520,7 @@ drop table t1;
--echo # --echo #
--echo # Check strnxfrm() with odd length --echo # Check strnxfrm() with odd length
--echo # --echo #
set max_sort_length=9; set max_sort_length=65;
select @@max_sort_length; select @@max_sort_length;
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci); create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci);
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');

View File

@ -2203,10 +2203,10 @@ drop table t1;
# #
# Check strnxfrm() with odd length # Check strnxfrm() with odd length
# #
set max_sort_length=9; set max_sort_length=65;
select @@max_sort_length; select @@max_sort_length;
@@max_sort_length @@max_sort_length
9 65
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine heap; create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine heap;
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');
select * from t1 order by a; select * from t1 order by a;

View File

@ -2329,10 +2329,10 @@ drop table t1;
# #
# Check strnxfrm() with odd length # Check strnxfrm() with odd length
# #
set max_sort_length=9; set max_sort_length=65;
select @@max_sort_length; select @@max_sort_length;
@@max_sort_length @@max_sort_length
9 65
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine InnoDB; create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine InnoDB;
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');
select * from t1 order by a; select * from t1 order by a;

View File

@ -2336,10 +2336,10 @@ drop table t1;
# #
# Check strnxfrm() with odd length # Check strnxfrm() with odd length
# #
set max_sort_length=9; set max_sort_length=65;
select @@max_sort_length; select @@max_sort_length;
@@max_sort_length @@max_sort_length
9 65
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine MyISAM; create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine MyISAM;
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');
select * from t1 order by a; select * from t1 order by a;

View File

@ -1280,6 +1280,18 @@ Name_exp_1
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-4677 GROUP_CONCAT not showing any output with group_concat_max_len >= 4Gb
#
set group_concat_max_len=1024*1024*1024*4;
Warnings:
Warning 1292 Truncated incorrect group_concat_max_len value: '4294967296'
create table t1 (i int, j int);
insert into t1 values (1,1),(1,2);
select i, group_concat(j) from t1 group by i;
i group_concat(j)
1 1,2
drop table t1;
#
# End of 10.2 tests # End of 10.2 tests
# #
# #

View File

@ -939,6 +939,16 @@ DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-4677 GROUP_CONCAT not showing any output with group_concat_max_len >= 4Gb
--echo #
set group_concat_max_len=1024*1024*1024*4;
create table t1 (i int, j int);
insert into t1 values (1,1),(1,2);
select i, group_concat(j) from t1 group by i;
drop table t1;
--echo # --echo #
--echo # End of 10.2 tests --echo # End of 10.2 tests
--echo # --echo #

View File

@ -289,6 +289,24 @@ a b c d
3 f_ 1 0 1 3 f_ 1 0 1
3 f\_ 0 1 0 3 f\_ 0 1 0
drop table t1; drop table t1;
create table t1 (f int);
insert t1 values (1),(2);
select 1 from (select distinct * from t1) as x where f < (select 1 like 2 escape (3=1));
1
drop table t1;
create table t1(f1 int);
insert into t1 values(1);
update (select 1 like 2 escape (1 in (select 1 from t1))) x, t1 as d set d.f1 = 1;
ERROR HY000: Incorrect arguments to ESCAPE
select * from (select 1 like 2 escape (1 in (select 1 from t1))) x;
1 like 2 escape (1 in (select 1 from t1))
0
drop table t1;
create table t1 (f int);
insert t1 values (1),(2);
create view v1 as select * from t1 where (1 like 2 escape (3 in (('h', 'b') in (select 'k', 'k' union select 'g', 'j'))) and f >= 0);
drop view v1;
drop table t1;
# #
# MDEV-17359 - Extend expression supported by like (| & << >> || + - * / DIV MOD ^ ) # MDEV-17359 - Extend expression supported by like (| & << >> || + - * / DIV MOD ^ )
# #

View File

@ -187,7 +187,7 @@ DROP TABLE t1;
--echo # --echo #
# #
# Item_func_line::print() # Item_func_like::print()
# #
create view v1 as select 'foo!' like 'foo!!', 'foo!' like 'foo!!' escape '!'; create view v1 as select 'foo!' like 'foo!!', 'foo!' like 'foo!!' escape '!';
show create view v1; show create view v1;
@ -208,6 +208,33 @@ set sql_mode=default;
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# Item_func_like::fix_fields()
#
create table t1 (f int);
insert t1 values (1),(2);
select 1 from (select distinct * from t1) as x where f < (select 1 like 2 escape (3=1));
drop table t1;
#
# Item_func_like::fix_fields, ESCAPE, const_item()
#
create table t1(f1 int);
insert into t1 values(1);
--error ER_WRONG_ARGUMENTS
update (select 1 like 2 escape (1 in (select 1 from t1))) x, t1 as d set d.f1 = 1;
select * from (select 1 like 2 escape (1 in (select 1 from t1))) x;
drop table t1;
#
# Item_func_like::walk
#
create table t1 (f int);
insert t1 values (1),(2);
create view v1 as select * from t1 where (1 like 2 escape (3 in (('h', 'b') in (select 'k', 'k' union select 'g', 'j'))) and f >= 0);
drop view v1;
drop table t1;
--echo # --echo #
--echo # MDEV-17359 - Extend expression supported by like (| & << >> || + - * / DIV MOD ^ ) --echo # MDEV-17359 - Extend expression supported by like (| & << >> || + - * / DIV MOD ^ )
--echo # --echo #

View File

@ -863,6 +863,7 @@ where data_type = 'longtext' and table_schema != 'performance_schema'
order by binary table_name, ordinal_position; order by binary table_name, ordinal_position;
table_schema table_name column_name table_schema table_name column_name
information_schema ALL_PLUGINS PLUGIN_DESCRIPTION information_schema ALL_PLUGINS PLUGIN_DESCRIPTION
information_schema CHECK_CONSTRAINTS CHECK_CLAUSE
information_schema COLUMNS COLUMN_DEFAULT information_schema COLUMNS COLUMN_DEFAULT
information_schema COLUMNS COLUMN_TYPE information_schema COLUMNS COLUMN_TYPE
information_schema COLUMNS GENERATION_EXPRESSION information_schema COLUMNS GENERATION_EXPRESSION
@ -2222,17 +2223,10 @@ SCHEMA_NAME
# MDEV-14836: Assertion `m_status == DA_ERROR' failed in # MDEV-14836: Assertion `m_status == DA_ERROR' failed in
# Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED # Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED
# #
SELECT * FROM seq_1_to_100 LIMIT ROWS EXAMINED 10; SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` LIMIT ROWS EXAMINED 10;
seq TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT IS_GENERATED GENERATION_EXPRESSION
1
2
3
4
5
6
7
Warnings: Warnings:
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 Warning 1931 Query execution was interrupted. The query examined at least ### rows, which exceeds LIMIT ROWS EXAMINED (10). The query result may be incomplete
# #
# End of 10.2 Test # End of 10.2 Test
# #

View File

@ -1931,7 +1931,8 @@ SELECT SCHEMA_NAME from information_schema.schemata where schema_name=REPEAT('a'
--echo # Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED --echo # Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED
--echo # --echo #
SELECT * FROM seq_1_to_100 LIMIT ROWS EXAMINED 10; replace_regex /at least \d+ rows/at least ### rows/;
SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` LIMIT ROWS EXAMINED 10;
--echo # --echo #
--echo # End of 10.2 Test --echo # End of 10.2 Test

View File

@ -229,3 +229,37 @@ drop user definer@localhost;
drop database mysqltest1; drop database mysqltest1;
drop database mysqltest2; drop database mysqltest2;
drop database mysqltest3; drop database mysqltest3;
#
# MDEV-24331 mysqldump fails with "Got error: 1356" if the database contains a view with a subquery
#
create user u1@localhost;
grant all privileges on test.* to u1@localhost;
connect con1,localhost,u1;
use test;
create table t1 (id int not null);
create view v1 as select * from (select * from t1) dt;
lock table v1 read;
disconnect con1;
connection default;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `v1` (
`id` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
/*!50001 DROP TABLE IF EXISTS `v1`*/;
/*!50001 SET @saved_cs_client = @@character_set_client */;
/*!50001 SET @saved_cs_results = @@character_set_results */;
/*!50001 SET @saved_col_connection = @@collation_connection */;
/*!50001 SET character_set_client = latin1 */;
/*!50001 SET character_set_results = latin1 */;
/*!50001 SET collation_connection = latin1_swedish_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`u1`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v1` AS select `dt`.`id` AS `id` from (select `test`.`t1`.`id` AS `id` from `test`.`t1`) `dt` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
drop view v1;
drop table t1;
drop user u1@localhost;

View File

@ -75,3 +75,20 @@ drop user definer@localhost;
drop database mysqltest1; drop database mysqltest1;
drop database mysqltest2; drop database mysqltest2;
drop database mysqltest3; drop database mysqltest3;
--echo #
--echo # MDEV-24331 mysqldump fails with "Got error: 1356" if the database contains a view with a subquery
--echo #
create user u1@localhost;
grant all privileges on test.* to u1@localhost;
connect con1,localhost,u1;
use test;
create table t1 (id int not null);
create view v1 as select * from (select * from t1) dt;
lock table v1 read;
disconnect con1;
connection default;
exec $MYSQL_DUMP test v1 -uu1 --compact;
drop view v1;
drop table t1;
drop user u1@localhost;

View File

@ -484,8 +484,6 @@ even_longer_user_name_number_3_to_test_the_grantor_and_definer_field_length@loca
DROP USER very_long_user_name_number_1, very_long_user_name_number_2, even_longer_user_name_number_3_to_test_the_grantor_and_definer_field_length@localhost; DROP USER very_long_user_name_number_1, very_long_user_name_number_2, even_longer_user_name_number_3_to_test_the_grantor_and_definer_field_length@localhost;
DROP PROCEDURE test.pr; DROP PROCEDURE test.pr;
use test; use test;
call mtr.add_suppression('Column last_update in table `mysql`.`innodb_table_stats` is INT NOT NULL but should be');
alter table mysql.innodb_table_stats modify last_update int not null;
create table extralongname_extralongname_extralongname_extralongname_ext ( create table extralongname_extralongname_extralongname_extralongname_ext (
id int(10) unsigned not null, id int(10) unsigned not null,
created_date date not null, created_date date not null,

View File

@ -172,8 +172,6 @@ DROP PROCEDURE test.pr;
# MDEV-13274 mysql_upgrade fails if dbname+tablename+partioname > 64 chars # MDEV-13274 mysql_upgrade fails if dbname+tablename+partioname > 64 chars
# #
use test; use test;
call mtr.add_suppression('Column last_update in table `mysql`.`innodb_table_stats` is INT NOT NULL but should be');
alter table mysql.innodb_table_stats modify last_update int not null;
create table extralongname_extralongname_extralongname_extralongname_ext ( create table extralongname_extralongname_extralongname_extralongname_ext (
id int(10) unsigned not null, id int(10) unsigned not null,

View File

@ -845,18 +845,20 @@ col2 col col
2 2 2 2 2 2
1 3 3 1 3 3
drop table t1, t2; drop table t1, t2;
create table t1 (a char(25)); create table t1 (a char(70));
insert into t1 set a = repeat('x', 20); insert into t1 set a = repeat('x', 20);
insert into t1 set a = concat(repeat('x', 19), 'z'); insert into t1 set a = concat(repeat('x', 63), 'z');
insert into t1 set a = concat(repeat('x', 19), 'ab'); insert into t1 set a = concat(repeat('x', 63), 'ab');
insert into t1 set a = concat(repeat('x', 19), 'aa'); insert into t1 set a = concat(repeat('x', 63), 'aa');
set max_sort_length=20; set max_sort_length=20;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '20'
select a from t1 order by a; select a from t1 order by a;
a a
xxxxxxxxxxxxxxxxxxxab
xxxxxxxxxxxxxxxxxxxaa
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxz xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxab
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaa
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz
drop table t1; drop table t1;
create table t1 ( create table t1 (
`sid` decimal(8,0) default null, `sid` decimal(8,0) default null,
@ -3317,6 +3319,8 @@ drop table t1;
SET @save_sort_buffer_size= @@sort_buffer_size; SET @save_sort_buffer_size= @@sort_buffer_size;
SET @save_max_sort_length= @@max_sort_length; SET @save_max_sort_length= @@max_sort_length;
SET max_sort_length=8; SET max_sort_length=8;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8'
SET sort_buffer_size=1024; SET sort_buffer_size=1024;
CREATE TABLE t1(a INT, b DECIMAL(65), c BLOB); CREATE TABLE t1(a INT, b DECIMAL(65), c BLOB);
INSERT INTO t1 SELECT seq, seq, seq from seq_1_to_25; INSERT INTO t1 SELECT seq, seq, seq from seq_1_to_25;
@ -3384,6 +3388,8 @@ SET @save_max_sort_length= @@max_sort_length;
SET @save_sort_buffer_size= @@sort_buffer_size; SET @save_sort_buffer_size= @@sort_buffer_size;
SET @save_max_length_for_sort_data= @@max_length_for_sort_data; SET @save_max_length_for_sort_data= @@max_length_for_sort_data;
SET max_sort_length=8; SET max_sort_length=8;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8'
SET sort_buffer_size=1024; SET sort_buffer_size=1024;
SET max_length_for_sort_data=7000; SET max_length_for_sort_data=7000;
CREATE TABLE t1(a VARCHAR(64), b VARCHAR(2048))DEFAULT CHARSET=utf8; CREATE TABLE t1(a VARCHAR(64), b VARCHAR(2048))DEFAULT CHARSET=utf8;
@ -3519,6 +3525,8 @@ INSERT INTO t1 VALUES (1,1), (2,2), (3,3), (4,4);
SET max_length_for_sort_data= 30; SET max_length_for_sort_data= 30;
SET sql_select_limit = 3; SET sql_select_limit = 3;
SET max_sort_length=8; SET max_sort_length=8;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8'
SELECT * FROM t1 ORDER BY a+1; SELECT * FROM t1 ORDER BY a+1;
a b a b
1 1 1 1

View File

@ -532,11 +532,11 @@ drop table t1, t2;
# Bug #5428: a problem with small max_sort_length value # Bug #5428: a problem with small max_sort_length value
# #
create table t1 (a char(25)); create table t1 (a char(70));
insert into t1 set a = repeat('x', 20); insert into t1 set a = repeat('x', 20);
insert into t1 set a = concat(repeat('x', 19), 'z'); insert into t1 set a = concat(repeat('x', 63), 'z');
insert into t1 set a = concat(repeat('x', 19), 'ab'); insert into t1 set a = concat(repeat('x', 63), 'ab');
insert into t1 set a = concat(repeat('x', 19), 'aa'); insert into t1 set a = concat(repeat('x', 63), 'aa');
set max_sort_length=20; set max_sort_length=20;
select a from t1 order by a; select a from t1 order by a;
drop table t1; drop table t1;

View File

@ -8016,4 +8016,8 @@ create or replace view v1 as select 1 IS TRUE IS FALSE, 2 IS FALSE IS UNKNOWN, 3
Select view_definition from information_schema.views where table_schema='test' and table_name='v1'; Select view_definition from information_schema.views where table_schema='test' and table_name='v1';
view_definition view_definition
select 1 is true is false AS `1 IS TRUE IS FALSE`,/*always not null*/ 1 is null AS `2 IS FALSE IS UNKNOWN`,/*always not null*/ 1 is null AS `3 IS UNKNOWN IS NULL`,/*always not null*/ 1 is null is true AS `4 IS NULL IS TRUE` select 1 is true is false AS `1 IS TRUE IS FALSE`,/*always not null*/ 1 is null AS `2 IS FALSE IS UNKNOWN`,/*always not null*/ 1 is null AS `3 IS UNKNOWN IS NULL`,/*always not null*/ 1 is null is true AS `4 IS NULL IS TRUE`
create or replace view v1 as select 2 IS TRUE = 3, 2 IS FALSE = 3, 2 IS UNKNOWN = 3, 2 IS NULL = 3, ISNULL(2) = 1;
Select view_definition from information_schema.views where table_schema='test' and table_name='v1';
view_definition
select 2 is true = 3 AS `2 IS TRUE = 3`,2 is false = 3 AS `2 IS FALSE = 3`,/*always not null*/ 1 is null = 3 AS `2 IS UNKNOWN = 3`,/*always not null*/ 1 is null = 3 AS `2 IS NULL = 3`,/*always not null*/ 1 is null = 1 AS `ISNULL(2) = 1`
drop view v1; drop view v1;

View File

@ -4785,4 +4785,7 @@ Select view_definition from information_schema.views where table_schema='test' a
create or replace view v1 as select 1 IS TRUE IS FALSE, 2 IS FALSE IS UNKNOWN, 3 IS UNKNOWN IS NULL, 4 IS NULL IS TRUE; create or replace view v1 as select 1 IS TRUE IS FALSE, 2 IS FALSE IS UNKNOWN, 3 IS UNKNOWN IS NULL, 4 IS NULL IS TRUE;
Select view_definition from information_schema.views where table_schema='test' and table_name='v1'; Select view_definition from information_schema.views where table_schema='test' and table_name='v1';
create or replace view v1 as select 2 IS TRUE = 3, 2 IS FALSE = 3, 2 IS UNKNOWN = 3, 2 IS NULL = 3, ISNULL(2) = 1;
Select view_definition from information_schema.views where table_schema='test' and table_name='v1';
drop view v1; drop view v1;

View File

@ -818,33 +818,33 @@ select @@character_set_results;
NULL NULL
set character_set_results=default; set character_set_results=default;
set GLOBAL query_cache_size=1355776; set GLOBAL query_cache_size=1355776;
create table t1 (id int auto_increment primary key, c char(25)); create table t1 (id int auto_increment primary key, c char(65));
insert into t1 set c = repeat('x',24); insert into t1 set c = repeat('x',24);
insert into t1 set c = concat(repeat('x',24),'x'); insert into t1 set c = concat(repeat('x',64),'x');
insert into t1 set c = concat(repeat('x',24),'w'); insert into t1 set c = concat(repeat('x',64),'w');
insert into t1 set c = concat(repeat('x',24),'y'); insert into t1 set c = concat(repeat('x',64),'y');
set max_sort_length=200; set max_sort_length=200;
select c from t1 order by c, id; select c from t1 order by c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy
reset query cache; reset query cache;
set max_sort_length=20; set max_sort_length=64;
select c from t1 order by c, id; select c from t1 order by c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
xxxxxxxxxxxxxxxxxxxxxxxxy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy
set max_sort_length=200; set max_sort_length=200;
select c from t1 order by c, id; select c from t1 order by c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy
set max_sort_length=default; set max_sort_length=default;
select '1' || '3' from t1; select '1' || '3' from t1;
'1' || '3' '1' || '3'

View File

@ -606,15 +606,15 @@ set character_set_results=default;
# #
# max_sort_length # max_sort_length
set GLOBAL query_cache_size=1355776; set GLOBAL query_cache_size=1355776;
create table t1 (id int auto_increment primary key, c char(25)); create table t1 (id int auto_increment primary key, c char(65));
insert into t1 set c = repeat('x',24); insert into t1 set c = repeat('x',24);
insert into t1 set c = concat(repeat('x',24),'x'); insert into t1 set c = concat(repeat('x',64),'x');
insert into t1 set c = concat(repeat('x',24),'w'); insert into t1 set c = concat(repeat('x',64),'w');
insert into t1 set c = concat(repeat('x',24),'y'); insert into t1 set c = concat(repeat('x',64),'y');
set max_sort_length=200; set max_sort_length=200;
select c from t1 order by c, id; select c from t1 order by c, id;
reset query cache; reset query cache;
set max_sort_length=20; set max_sort_length=64;
select c from t1 order by c, id; select c from t1 order by c, id;
set max_sort_length=200; set max_sort_length=200;
select c from t1 order by c, id; select c from t1 order by c, id;

View File

@ -3218,6 +3218,31 @@ pk a b
1 5 50 1 5 50
65 5 50 65 5 50
drop table t1; drop table t1;
create table t1(a int);
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t2 (
pk int primary key,
key1 int,
col1 varchar(255),
key (key1, pk)
);
insert into t2 (pk, key1)
select A.a+10 *B.a + 100*C.a, A.a+10 *B.a +100*C.a from t1 A, t1 B, t1 C;
# This must use ALL, not range:
explain select * from t2 force index (primary) where pk not in (1,2,3);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL PRIMARY NULL NULL NULL 1000 Using where
drop table t1,t2;
#
# MDEV-24444: ASAN use-after-poison in Item_func_in::get_func_mm_tree with NOT IN
#
CREATE TABLE t1 (id INT, a CHAR(3), b INT, PRIMARY KEY(id), KEY(b), KEY(a));
INSERT INTO t1 VALUES (1,'foo',10),(2,'bar',20);
CREATE TABLE t2 (code CHAR(8), num INT, PRIMARY KEY (code));
INSERT INTO t2 VALUES ('100',1),('111',2);
SELECT * FROM t1 JOIN t2 ON (t2.code = t1.b) WHERE t1.a NOT IN ('baz', 'qux') OR t2.num != 3;
id a b code num
DROP TABLE t1, t2;
# #
# End of 10.2 tests # End of 10.2 tests
# #

View File

@ -2180,6 +2180,40 @@ eval $q4;
drop table t1; drop table t1;
#
# MDEV-21958: Query having many NOT-IN clauses running forever (testcase 2)
#
create table t1(a int);
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t2 (
pk int primary key,
key1 int,
col1 varchar(255),
key (key1, pk)
);
insert into t2 (pk, key1)
select A.a+10 *B.a + 100*C.a, A.a+10 *B.a +100*C.a from t1 A, t1 B, t1 C;
--echo # This must use ALL, not range:
explain select * from t2 force index (primary) where pk not in (1,2,3);
drop table t1,t2;
--echo #
--echo # MDEV-24444: ASAN use-after-poison in Item_func_in::get_func_mm_tree with NOT IN
--echo #
CREATE TABLE t1 (id INT, a CHAR(3), b INT, PRIMARY KEY(id), KEY(b), KEY(a));
INSERT INTO t1 VALUES (1,'foo',10),(2,'bar',20);
CREATE TABLE t2 (code CHAR(8), num INT, PRIMARY KEY (code));
INSERT INTO t2 VALUES ('100',1),('111',2);
SELECT * FROM t1 JOIN t2 ON (t2.code = t1.b) WHERE t1.a NOT IN ('baz', 'qux') OR t2.num != 3;
DROP TABLE t1, t2;
--echo # --echo #
--echo # End of 10.2 tests --echo # End of 10.2 tests
--echo # --echo #

View File

@ -3215,6 +3215,31 @@ pk a b
70 4 40 70 4 40
71 2 20 71 2 20
drop table t1; drop table t1;
create table t1(a int);
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t2 (
pk int primary key,
key1 int,
col1 varchar(255),
key (key1, pk)
);
insert into t2 (pk, key1)
select A.a+10 *B.a + 100*C.a, A.a+10 *B.a +100*C.a from t1 A, t1 B, t1 C;
# This must use ALL, not range:
explain select * from t2 force index (primary) where pk not in (1,2,3);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL PRIMARY NULL NULL NULL 1000 Using where
drop table t1,t2;
#
# MDEV-24444: ASAN use-after-poison in Item_func_in::get_func_mm_tree with NOT IN
#
CREATE TABLE t1 (id INT, a CHAR(3), b INT, PRIMARY KEY(id), KEY(b), KEY(a));
INSERT INTO t1 VALUES (1,'foo',10),(2,'bar',20);
CREATE TABLE t2 (code CHAR(8), num INT, PRIMARY KEY (code));
INSERT INTO t2 VALUES ('100',1),('111',2);
SELECT * FROM t1 JOIN t2 ON (t2.code = t1.b) WHERE t1.a NOT IN ('baz', 'qux') OR t2.num != 3;
id a b code num
DROP TABLE t1, t2;
# #
# End of 10.2 tests # End of 10.2 tests
# #

View File

@ -1,4 +1,3 @@
drop table if exists t1;
create table t1 (y year,y2 year(2)); create table t1 (y year,y2 year(2));
Warnings: Warnings:
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
@ -28,6 +27,9 @@ y y2
2001 01 2001 01
2069 69 2069 69
drop table t1; drop table t1;
#
# Bug 2335
#
create table t1 (y year); create table t1 (y year);
insert ignore into t1 values (now()); insert ignore into t1 values (now());
Warnings: Warnings:
@ -36,6 +38,9 @@ select if(y = now(), 1, 0) from t1;
if(y = now(), 1, 0) if(y = now(), 1, 0)
1 1
drop table t1; drop table t1;
#
# Bug #27176: Assigning a string to an year column has unexpected results
#
create table t1(a year); create table t1(a year);
insert into t1 values (2000.5), ('2000.5'), ('2001a'), ('2.001E3'); insert into t1 values (2000.5), ('2000.5'), ('2001a'), ('2.001E3');
Warnings: Warnings:
@ -47,7 +52,9 @@ a
2001 2001
2001 2001
drop table t1; drop table t1;
End of 5.0 tests #
# End of 5.0 tests
#
# #
# Bug #49480: WHERE using YEAR columns returns unexpected results # Bug #49480: WHERE using YEAR columns returns unexpected results
# #
@ -373,7 +380,8 @@ Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Pleas
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
DROP TABLE t1; DROP TABLE t1;
# #
End of 5.1 tests # End of 5.1 tests
#
create function y2k() returns int deterministic return 2000; create function y2k() returns int deterministic return 2000;
create table t1 (a year(2), b int); create table t1 (a year(2), b int);
Warnings: Warnings:
@ -456,9 +464,6 @@ DROP TABLE t1;
# End of 10.1 tests # End of 10.1 tests
# #
# #
# Start of 10.2 tests
#
#
# MDEV-9392 Copying from DECIMAL to YEAR is not consistent about warnings # MDEV-9392 Copying from DECIMAL to YEAR is not consistent about warnings
# #
CREATE TABLE t1 (a YEAR); CREATE TABLE t1 (a YEAR);
@ -500,6 +505,64 @@ Warnings:
Warning 1264 Out of range value for column 'a' at row 1 Warning 1264 Out of range value for column 'a' at row 1
DROP TABLE t1; DROP TABLE t1;
# #
# Various widths of the YEAR
#
create or replace table t1 (a YEAR(0));
Warnings:
Note 1287 'YEAR(0)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` year(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
create or replace table t1 (a YEAR(1));
Warnings:
Note 1287 'YEAR(1)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` year(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
create or replace table t1 (a YEAR(2));
Warnings:
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` year(2) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
create or replace table t1 (a YEAR(3));
Warnings:
Note 1287 'YEAR(3)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` year(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
create or replace table t1 (a YEAR(4));
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` year(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
create or replace table t1 (a YEAR(5));
Warnings:
Note 1287 'YEAR(5)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` year(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
create or replace table t1 (a YEAR(100));
Warnings:
Note 1287 'YEAR(100)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` year(4) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
#
# End of 10.2 tests # End of 10.2 tests
# #
# #

View File

@ -1,9 +1,6 @@
# #
# Test year # Test year
# #
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1 (y year,y2 year(2)); create table t1 (y year,y2 year(2));
insert into t1 values (0,0),(1999,1999),(2000,2000),(2001,2001),(70,70),(69,69); insert into t1 values (0,0),(1999,1999),(2000,2000),(2001,2001),(70,70),(69,69);
@ -12,24 +9,27 @@ select * from t1 order by y;
select * from t1 order by y2; select * from t1 order by y2;
drop table t1; drop table t1;
# --echo #
# Bug 2335 --echo # Bug 2335
# --echo #
create table t1 (y year); create table t1 (y year);
insert ignore into t1 values (now()); insert ignore into t1 values (now());
select if(y = now(), 1, 0) from t1; select if(y = now(), 1, 0) from t1;
drop table t1; drop table t1;
# --echo #
# Bug #27176: Assigning a string to an year column has unexpected results --echo # Bug #27176: Assigning a string to an year column has unexpected results
# --echo #
create table t1(a year); create table t1(a year);
insert into t1 values (2000.5), ('2000.5'), ('2001a'), ('2.001E3'); insert into t1 values (2000.5), ('2000.5'), ('2001a'), ('2.001E3');
select * from t1; select * from t1;
drop table t1; drop table t1;
--echo End of 5.0 tests --echo #
--echo # End of 5.0 tests
--echo #
--echo # --echo #
--echo # Bug #49480: WHERE using YEAR columns returns unexpected results --echo # Bug #49480: WHERE using YEAR columns returns unexpected results
@ -168,9 +168,10 @@ CREATE TABLE t1 (c1 YEAR(2), c2 YEAR(4));
ALTER TABLE t1 MODIFY COLUMN c2 YEAR(2); ALTER TABLE t1 MODIFY COLUMN c2 YEAR(2);
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # End of 5.1 tests
--echo # --echo #
--echo End of 5.1 tests
# #
# fun with convert_const_to_int # fun with convert_const_to_int
# in some cases 00 is equal to 2000, in others it is not. # in some cases 00 is equal to 2000, in others it is not.
@ -229,10 +230,6 @@ DROP TABLE t1;
--echo # End of 10.1 tests --echo # End of 10.1 tests
--echo # --echo #
--echo #
--echo # Start of 10.2 tests
--echo #
--echo # --echo #
--echo # MDEV-9392 Copying from DECIMAL to YEAR is not consistent about warnings --echo # MDEV-9392 Copying from DECIMAL to YEAR is not consistent about warnings
--echo # --echo #
@ -268,6 +265,17 @@ SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR
ALTER TABLE t1 MODIFY a YEAR; ALTER TABLE t1 MODIFY a YEAR;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Various widths of the YEAR
--echo #
create or replace table t1 (a YEAR(0)); SHOW CREATE TABLE t1;
create or replace table t1 (a YEAR(1)); SHOW CREATE TABLE t1;
create or replace table t1 (a YEAR(2)); SHOW CREATE TABLE t1;
create or replace table t1 (a YEAR(3)); SHOW CREATE TABLE t1;
create or replace table t1 (a YEAR(4)); SHOW CREATE TABLE t1;
create or replace table t1 (a YEAR(5)); SHOW CREATE TABLE t1;
create or replace table t1 (a YEAR(100)); SHOW CREATE TABLE t1;
drop table t1;
--echo # --echo #
--echo # End of 10.2 tests --echo # End of 10.2 tests

View File

@ -6723,6 +6723,41 @@ DROP PROCEDURE sp;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-24314: create view with derived table without default database
#
drop database test;
create database db1;
create table db1.t1 (a int);
insert into db1.t1 values (3),(7),(1);
create view db1.v1 as select * from (select * from db1.t1) t;
show create view db1.v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `db1`.`v1` AS select `t`.`a` AS `a` from (select `db1`.`t1`.`a` AS `a` from `db1`.`t1`) `t` latin1 latin1_swedish_ci
select * from db1.v1;
a
3
7
1
drop view db1.v1;
prepare stmt from "
create view db1.v1 as select * from (select * from db1.t1) t;
";
execute stmt;
deallocate prepare stmt;
show create view db1.v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `db1`.`v1` AS select `t`.`a` AS `a` from (select `db1`.`t1`.`a` AS `a` from `db1`.`t1`) `t` latin1 latin1_swedish_ci
select * from db1.v1;
a
3
7
1
drop view db1.v1;
drop table db1.t1;
drop database db1;
create database test;
use test;
#
# End of 10.2 tests # End of 10.2 tests
# #
# #

View File

@ -6432,6 +6432,36 @@ DROP PROCEDURE sp;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-24314: create view with derived table without default database
--echo #
drop database test;
create database db1;
create table db1.t1 (a int);
insert into db1.t1 values (3),(7),(1);
create view db1.v1 as select * from (select * from db1.t1) t;
show create view db1.v1;
select * from db1.v1;
drop view db1.v1;
prepare stmt from "
create view db1.v1 as select * from (select * from db1.t1) t;
";
execute stmt;
deallocate prepare stmt;
show create view db1.v1;
select * from db1.v1;
drop view db1.v1;
drop table db1.t1;
drop database db1;
create database test;
use test;
--echo # --echo #
--echo # End of 10.2 tests --echo # End of 10.2 tests
--echo # --echo #

View File

@ -3222,6 +3222,7 @@ sub mysql_install_db {
mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/"); mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/");
mtr_add_arg($args, "--core-file"); mtr_add_arg($args, "--core-file");
mtr_add_arg($args, "--console"); mtr_add_arg($args, "--console");
mtr_add_arg($args, "--character-set-server=latin1");
if ( $opt_debug ) if ( $opt_debug )
{ {

View File

@ -9,5 +9,3 @@
# Do not use any TAB characters for whitespace. # Do not use any TAB characters for whitespace.
# #
############################################################################## ##############################################################################
binlog_truncate_innodb : BUG#11764459 2010-10-20 anitha Originally disabled due to BUG#42643. Product bug fixed, but test changes needed
binlog_spurious_ddl_errors : BUG#11761680 2013-01-18 astha Fixed on mysql-5.6 and trunk

View File

@ -1,5 +1,5 @@
SET @old_binlog_format= @@global.binlog_format; SET @old_binlog_format= @@global.binlog_format;
INSTALL PLUGIN example SONAME 'ha_example.so'; INSTALL PLUGIN example SONAME 'ha_example';
################################################################################ ################################################################################
# Verifies if ER_BINLOG_STMT_MODE_AND_ROW_ENGINE happens by setting the binlog # Verifies if ER_BINLOG_STMT_MODE_AND_ROW_ENGINE happens by setting the binlog
# format to STATEMENT and the transaction isolation level to READ COMMITTED as # format to STATEMENT and the transaction isolation level to READ COMMITTED as
@ -18,7 +18,7 @@ ALTER TABLE t_row ADD COLUMN b INT;
CREATE TRIGGER trig_row BEFORE INSERT ON t_row FOR EACH ROW INSERT INTO t_stmt VALUES (1); CREATE TRIGGER trig_row BEFORE INSERT ON t_row FOR EACH ROW INSERT INTO t_stmt VALUES (1);
CREATE INDEX i ON t_row(a); CREATE INDEX i ON t_row(a);
CREATE TABLE t_row_new ENGINE = InnoDB SELECT * FROM t_row; CREATE TABLE t_row_new ENGINE = InnoDB SELECT * FROM t_row;
ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED. ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.
DROP TABLE t_row; DROP TABLE t_row;
@ -36,12 +36,11 @@ DROP TABLE t_row;
SET binlog_format = ROW; SET binlog_format = ROW;
CREATE TABLE t_stmt (a VARCHAR(100)) ENGINE = EXAMPLE; CREATE TABLE t_stmt (a VARCHAR(100)) ENGINE = EXAMPLE;
ALTER TABLE t_stmt ADD COLUMN b INT; ALTER TABLE t_stmt ADD COLUMN b INT;
ERROR 42000: This version of MySQL doesn't yet support 'ALTER TABLE'
CREATE TRIGGER trig_stmt BEFORE INSERT ON t_stmt FOR EACH ROW INSERT INTO t_stmt VALUES (1); CREATE TRIGGER trig_stmt BEFORE INSERT ON t_stmt FOR EACH ROW INSERT INTO t_stmt VALUES (1);
CREATE INDEX i ON t_stmt(a); CREATE INDEX i ON t_stmt(a);
ERROR 42000: Too many key parts specified; max 0 parts allowed ERROR 42000: Too many key parts specified; max 0 parts allowed
CREATE TABLE t_stmt_new ENGINE = EXAMPLE SELECT * FROM t_stmt; CREATE TABLE t_stmt_new ENGINE = EXAMPLE SELECT * FROM t_stmt;
ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based logging. ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based logging
DROP TABLE t_stmt; DROP TABLE t_stmt;

View File

@ -7,9 +7,11 @@ INSERT INTO t2 VALUES (1),(2),(3);
**** Truncate of empty table shall be logged **** Truncate of empty table shall be logged
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -18,18 +20,17 @@ DROP TABLE t1,t2;
CREATE TABLE t1 (a INT) ENGINE=InnoDB; CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -37,16 +38,20 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# Even though the isolation level might be permissive, truncate # Even though the isolation level might be permissive, truncate
# table follows a stricter isolation as its locking is based on # table follows a stricter isolation as its locking is based on
@ -59,9 +64,11 @@ SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -71,18 +78,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -90,16 +96,20 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
CREATE TABLE t1 (a INT) ENGINE=InnoDB; CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
@ -109,9 +119,11 @@ SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -121,18 +133,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -140,16 +151,20 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
CREATE TABLE t1 (a INT) ENGINE=InnoDB; CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
@ -159,9 +174,11 @@ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -171,18 +188,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -190,16 +206,20 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
CREATE TABLE t1 (a INT) ENGINE=InnoDB; CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
@ -209,9 +229,11 @@ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -221,18 +243,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -240,16 +261,20 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Annotate_rows # # INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Table_map # # table_id: # (test.t2) master-bin.000001 # Table_map # # table_id: # (test.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
SET BINLOG_FORMAT=STATEMENT; SET BINLOG_FORMAT=STATEMENT;
RESET MASTER; RESET MASTER;
@ -261,9 +286,11 @@ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -273,18 +300,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -292,14 +318,16 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1 master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1 master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# Truncate is not supported for SBR if the isolation level is # Truncate is not supported for SBR if the isolation level is
# READ UNCOMMITTED or READ COMMITTED. These specific isolation # READ UNCOMMITTED or READ COMMITTED. These specific isolation
@ -312,9 +340,11 @@ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -324,18 +354,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -343,14 +372,16 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1 master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1 master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
CREATE TABLE t1 (a INT) ENGINE=InnoDB; CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
@ -360,9 +391,11 @@ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
TRUNCATE TABLE t2; TRUNCATE TABLE t2;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
@ -372,18 +405,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB; CREATE TABLE t2 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
# Connection: default
BEGIN; BEGIN;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
# Connection: truncate connect truncate,localhost,root,,;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
# Connection: default connection default;
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
COMMIT; COMMIT;
# Connection: truncate connection truncate;
# Reaping TRUNCATE TABLE # Reaping TRUNCATE TABLE
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@ -391,13 +423,16 @@ COUNT(*)
SELECT COUNT(*) FROM t2; SELECT COUNT(*) FROM t2;
COUNT(*) COUNT(*)
4 4
# Connection: default connection default;
show binlog events from <binlog_start>; include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1 master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1 master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
disconnect truncate;
DROP TABLE t1,t2; DROP TABLE t1,t2;
SET BINLOG_FORMAT=@old_binlog_format; SET @@global.binlog_format = @old_binlog_format;
SET @@session.binlog_format = @old_binlog_format;

View File

@ -71,7 +71,6 @@ DROP TABLE t_row;
SET binlog_format = ROW; SET binlog_format = ROW;
CREATE TABLE t_stmt (a VARCHAR(100)) ENGINE = EXAMPLE; CREATE TABLE t_stmt (a VARCHAR(100)) ENGINE = EXAMPLE;
--error ER_NOT_SUPPORTED_YET
ALTER TABLE t_stmt ADD COLUMN b INT; ALTER TABLE t_stmt ADD COLUMN b INT;
CREATE TRIGGER trig_stmt BEFORE INSERT ON t_stmt FOR EACH ROW INSERT INTO t_stmt VALUES (1); CREATE TRIGGER trig_stmt BEFORE INSERT ON t_stmt FOR EACH ROW INSERT INTO t_stmt VALUES (1);

View File

@ -1 +0,0 @@
--loose-innodb

View File

@ -41,4 +41,5 @@ source include/binlog_truncate.test;
let $before_truncate = SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; let $before_truncate = SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
source include/binlog_truncate.test; source include/binlog_truncate.test;
SET BINLOG_FORMAT=@old_binlog_format; SET @@global.binlog_format = @old_binlog_format;
SET @@session.binlog_format = @old_binlog_format;

View File

@ -164,20 +164,15 @@ connection slave;
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
connection master; connection master;
include/kill_binlog_dump_threads.inc
set global rpl_semi_sync_master_timeout= 5000; set global rpl_semi_sync_master_timeout= 5000;
[ master status should be ON ] [ master status should be ON ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 0 Rpl_semi_sync_master_no_tx 0
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_yes_tx 14 Rpl_semi_sync_master_yes_tx 14
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
[ semi-sync replication of these transactions will fail ] [ semi-sync replication of these transactions will fail ]
insert into t1 values (500); insert into t1 values (500);
[ master status should be OFF ] [ master status should be OFF ]
@ -235,9 +230,6 @@ max(a)
500 500
connection master; connection master;
[ master status should be ON again after slave catches up ] [ master status should be ON again after slave catches up ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 12 Rpl_semi_sync_master_no_tx 12
@ -304,8 +296,6 @@ connection master;
create table t1 (a int) engine = ENGINE_TYPE; create table t1 (a int) engine = ENGINE_TYPE;
drop table t1; drop table t1;
connection slave; connection slave;
show status like 'Rpl_relay%';
Variable_name Value
[ test reset master ] [ test reset master ]
connection master; connection master;
reset master; reset master;
@ -321,7 +311,7 @@ Rpl_semi_sync_master_yes_tx 0
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
reset slave; reset slave;
connection master; include/kill_binlog_dump_threads.inc
connection slave; connection slave;
include/start_slave.inc include/start_slave.inc
connection master; connection master;
@ -353,6 +343,7 @@ include/stop_slave.inc
reset slave; reset slave;
connection master; connection master;
reset master; reset master;
include/kill_binlog_dump_threads.inc
set sql_log_bin=0; set sql_log_bin=0;
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password'; grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
flush privileges; flush privileges;
@ -403,10 +394,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_slave_status OFF Rpl_semi_sync_slave_status OFF
connection master; connection master;
include/kill_binlog_dump_threads.inc
[ Semi-sync status on master should be ON ] [ Semi-sync status on master should be ON ]
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_status ON Rpl_semi_sync_master_status ON

View File

@ -2284,6 +2284,32 @@ connection master;
CREATE TABLE t1 (a INT) ENGINE=FEDERATED CONNECTION='mysql://@127.0.0.1:SLAVE_PORT/federated/t1'; CREATE TABLE t1 (a INT) ENGINE=FEDERATED CONNECTION='mysql://@127.0.0.1:SLAVE_PORT/federated/t1';
ERROR HY000: Can't create federated table. Foreign data src error: database: 'federated' username: '' hostname: '127.0.0.1' ERROR HY000: Can't create federated table. Foreign data src error: database: 'federated' username: '' hostname: '127.0.0.1'
# #
# MDEV-17573 Assertion in federatedx on multi-update
#
create table t1 (
x int,
d datetime);
create table t1f engine=FEDERATED connection='mysql://root@127.0.0.1:MASTER_MYPORT/test/t1';
create table t2 (
x int, y int,
d datetime);
create table t2f engine=FEDERATED connection='mysql://root@127.0.0.1:MASTER_MYPORT/test/t2';
create table t3 (
x int, y int, z int,
d datetime);
create table t3f engine=FEDERATED connection='mysql://root@127.0.0.1:MASTER_MYPORT/test/t3';
insert into t1 values (1, "1990-01-01 00:00");
insert into t1 values (1, "1991-01-01 11:11");
insert into t2 values (2, 2, "1992-02-02 22:22");
insert into t3 values (3, 3, 3, "1993-03-03 23:33");
update t1f, t2f, t3f set t1f.x= 11, t2f.y= 22, t3f.z= 33;
drop table t1f;
drop table t2f;
drop table t3f;
drop table t1;
drop table t2;
drop table t3;
#
# MDEV-21049 Segfault in create federatedx table with empty hostname # MDEV-21049 Segfault in create federatedx table with empty hostname
# #
connection master; connection master;

View File

@ -2010,6 +2010,35 @@ connection master;
--error ER_CANT_CREATE_FEDERATED_TABLE --error ER_CANT_CREATE_FEDERATED_TABLE
eval CREATE TABLE t1 (a INT) ENGINE=FEDERATED CONNECTION='mysql://@127.0.0.1:$SLAVE_MYPORT/federated/t1'; eval CREATE TABLE t1 (a INT) ENGINE=FEDERATED CONNECTION='mysql://@127.0.0.1:$SLAVE_MYPORT/federated/t1';
--echo #
--echo # MDEV-17573 Assertion in federatedx on multi-update
--echo #
create table t1 (
x int,
d datetime);
--replace_result $MASTER_MYPORT MASTER_MYPORT
eval create table t1f engine=FEDERATED connection='mysql://root@127.0.0.1:$MASTER_MYPORT/test/t1';
create table t2 (
x int, y int,
d datetime);
--replace_result $MASTER_MYPORT MASTER_MYPORT
eval create table t2f engine=FEDERATED connection='mysql://root@127.0.0.1:$MASTER_MYPORT/test/t2';
create table t3 (
x int, y int, z int,
d datetime);
--replace_result $MASTER_MYPORT MASTER_MYPORT
eval create table t3f engine=FEDERATED connection='mysql://root@127.0.0.1:$MASTER_MYPORT/test/t3';
insert into t1 values (1, "1990-01-01 00:00");
insert into t1 values (1, "1991-01-01 11:11");
insert into t2 values (2, 2, "1992-02-02 22:22");
insert into t3 values (3, 3, 3, "1993-03-03 23:33");
update t1f, t2f, t3f set t1f.x= 11, t2f.y= 22, t3f.z= 33;
drop table t1f; drop table t2f; drop table t3f; drop table t1; drop table t2; drop table t3;
--echo # --echo #
--echo # MDEV-21049 Segfault in create federatedx table with empty hostname --echo # MDEV-21049 Segfault in create federatedx table with empty hostname
--echo # --echo #

View File

@ -90,7 +90,9 @@ CREATE TABLE t3
( (
a int, a int,
b int check (b>0), # field constraint named 'b' b int check (b>0), # field constraint named 'b'
CONSTRAINT b check (b>10) # table constraint CONSTRAINT b check (b>10), # table constraint
# `CHECK_CLAUSE` should allow more then `var(64)` constraints
CONSTRAINT b1 check (b<123456789012345678901234567890123456789012345678901234567890123456789)
) ENGINE=InnoDB; ) ENGINE=InnoDB;
SELECT * from information_schema.check_constraints; SELECT * from information_schema.check_constraints;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
@ -104,6 +106,7 @@ def foo t2 CHK_dates `start_date` is null
def foo t2 name char_length(`name`) > 2 def foo t2 name char_length(`name`) > 2
def foo t3 b `b` > 0 def foo t3 b `b` > 0
def foo t3 b `b` > 10 def foo t3 b `b` > 10
def foo t3 b1 `b` < 123456789012345678901234567890123456789012345678901234567890123456789
disconnect con1; disconnect con1;
CONNECT con2, localhost, boo2,, test; CONNECT con2, localhost, boo2,, test;
SELECT * from information_schema.check_constraints; SELECT * from information_schema.check_constraints;

View File

@ -24,7 +24,7 @@ def information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 '' NO varchar 32 96 N
def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 '' NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select NEVER NULL def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 '' NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) select NEVER NULL
def information_schema CHARACTER_SETS DESCRIPTION 3 '' NO varchar 60 180 NULL NULL NULL utf8 utf8_general_ci varchar(60) select NEVER NULL def information_schema CHARACTER_SETS DESCRIPTION 3 '' NO varchar 60 180 NULL NULL NULL utf8 utf8_general_ci varchar(60) select NEVER NULL
def information_schema CHARACTER_SETS MAXLEN 4 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) select NEVER NULL def information_schema CHARACTER_SETS MAXLEN 4 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) select NEVER NULL
def information_schema CHECK_CONSTRAINTS CHECK_CLAUSE 5 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL def information_schema CHECK_CONSTRAINTS CHECK_CLAUSE 5 '' NO longtext 4294967295 4294967295 NULL NULL NULL utf8 utf8_general_ci longtext select NEVER NULL
def information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG 1 '' NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select NEVER NULL def information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG 1 '' NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) select NEVER NULL
def information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME 4 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL def information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME 4 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL
def information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA 2 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL def information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA 2 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) select NEVER NULL
@ -570,7 +570,7 @@ NULL information_schema CHARACTER_SETS MAXLEN bigint NULL NULL NULL NULL bigint(
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64)
3.0000 information_schema CHECK_CONSTRAINTS TABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CHECK_CONSTRAINTS TABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
3.0000 information_schema CHECK_CONSTRAINTS CHECK_CLAUSE varchar 64 192 utf8 utf8_general_ci varchar(64) 1.0000 information_schema CHECK_CONSTRAINTS CHECK_CLAUSE longtext 4294967295 4294967295 utf8 utf8_general_ci longtext
3.0000 information_schema CLIENT_STATISTICS CLIENT varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CLIENT_STATISTICS CLIENT varchar 64 192 utf8 utf8_general_ci varchar(64)
NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)

View File

@ -24,7 +24,7 @@ def information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 '' NO varchar 32 96 N
def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 '' NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) NEVER NULL def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 '' NO varchar 32 96 NULL NULL NULL utf8 utf8_general_ci varchar(32) NEVER NULL
def information_schema CHARACTER_SETS DESCRIPTION 3 '' NO varchar 60 180 NULL NULL NULL utf8 utf8_general_ci varchar(60) NEVER NULL def information_schema CHARACTER_SETS DESCRIPTION 3 '' NO varchar 60 180 NULL NULL NULL utf8 utf8_general_ci varchar(60) NEVER NULL
def information_schema CHARACTER_SETS MAXLEN 4 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) NEVER NULL def information_schema CHARACTER_SETS MAXLEN 4 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) NEVER NULL
def information_schema CHECK_CONSTRAINTS CHECK_CLAUSE 5 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) NEVER NULL def information_schema CHECK_CONSTRAINTS CHECK_CLAUSE 5 '' NO longtext 4294967295 4294967295 NULL NULL NULL utf8 utf8_general_ci longtext NEVER NULL
def information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG 1 '' NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) NEVER NULL def information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG 1 '' NO varchar 512 1536 NULL NULL NULL utf8 utf8_general_ci varchar(512) NEVER NULL
def information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME 4 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) NEVER NULL def information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME 4 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) NEVER NULL
def information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA 2 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) NEVER NULL def information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA 2 '' NO varchar 64 192 NULL NULL NULL utf8 utf8_general_ci varchar(64) NEVER NULL
@ -570,7 +570,7 @@ NULL information_schema CHARACTER_SETS MAXLEN bigint NULL NULL NULL NULL bigint(
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64)
3.0000 information_schema CHECK_CONSTRAINTS TABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CHECK_CONSTRAINTS TABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
3.0000 information_schema CHECK_CONSTRAINTS CHECK_CLAUSE varchar 64 192 utf8 utf8_general_ci varchar(64) 1.0000 information_schema CHECK_CONSTRAINTS CHECK_CLAUSE longtext 4294967295 4294967295 utf8 utf8_general_ci longtext
3.0000 information_schema CLIENT_STATISTICS CLIENT varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema CLIENT_STATISTICS CLIENT varchar 64 192 utf8 utf8_general_ci varchar(64)
NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)

View File

@ -91,9 +91,9 @@ TABLE_CATALOG def
TABLE_SCHEMA information_schema TABLE_SCHEMA information_schema
TABLE_NAME CHECK_CONSTRAINTS TABLE_NAME CHECK_CONSTRAINTS
TABLE_TYPE SYSTEM VIEW TABLE_TYPE SYSTEM VIEW
ENGINE MEMORY ENGINE MYISAM_OR_MARIA
VERSION 11 VERSION 11
ROW_FORMAT Fixed ROW_FORMAT DYNAMIC_OR_PAGE
TABLE_ROWS #TBLR# TABLE_ROWS #TBLR#
AVG_ROW_LENGTH #ARL# AVG_ROW_LENGTH #ARL#
DATA_LENGTH #DL# DATA_LENGTH #DL#
@ -1157,9 +1157,9 @@ TABLE_CATALOG def
TABLE_SCHEMA information_schema TABLE_SCHEMA information_schema
TABLE_NAME CHECK_CONSTRAINTS TABLE_NAME CHECK_CONSTRAINTS
TABLE_TYPE SYSTEM VIEW TABLE_TYPE SYSTEM VIEW
ENGINE MEMORY ENGINE MYISAM_OR_MARIA
VERSION 11 VERSION 11
ROW_FORMAT Fixed ROW_FORMAT DYNAMIC_OR_PAGE
TABLE_ROWS #TBLR# TABLE_ROWS #TBLR#
AVG_ROW_LENGTH #ARL# AVG_ROW_LENGTH #ARL#
DATA_LENGTH #DL# DATA_LENGTH #DL#

View File

@ -91,9 +91,9 @@ TABLE_CATALOG def
TABLE_SCHEMA information_schema TABLE_SCHEMA information_schema
TABLE_NAME CHECK_CONSTRAINTS TABLE_NAME CHECK_CONSTRAINTS
TABLE_TYPE SYSTEM VIEW TABLE_TYPE SYSTEM VIEW
ENGINE MEMORY ENGINE MYISAM_OR_MARIA
VERSION 11 VERSION 11
ROW_FORMAT Fixed ROW_FORMAT DYNAMIC_OR_PAGE
TABLE_ROWS #TBLR# TABLE_ROWS #TBLR#
AVG_ROW_LENGTH #ARL# AVG_ROW_LENGTH #ARL#
DATA_LENGTH #DL# DATA_LENGTH #DL#
@ -1157,9 +1157,9 @@ TABLE_CATALOG def
TABLE_SCHEMA information_schema TABLE_SCHEMA information_schema
TABLE_NAME CHECK_CONSTRAINTS TABLE_NAME CHECK_CONSTRAINTS
TABLE_TYPE SYSTEM VIEW TABLE_TYPE SYSTEM VIEW
ENGINE MEMORY ENGINE MYISAM_OR_MARIA
VERSION 11 VERSION 11
ROW_FORMAT Fixed ROW_FORMAT DYNAMIC_OR_PAGE
TABLE_ROWS #TBLR# TABLE_ROWS #TBLR#
AVG_ROW_LENGTH #ARL# AVG_ROW_LENGTH #ARL#
DATA_LENGTH #DL# DATA_LENGTH #DL#

View File

@ -69,7 +69,9 @@ CREATE TABLE t3
( (
a int, a int,
b int check (b>0), # field constraint named 'b' b int check (b>0), # field constraint named 'b'
CONSTRAINT b check (b>10) # table constraint CONSTRAINT b check (b>10), # table constraint
# `CHECK_CLAUSE` should allow more then `var(64)` constraints
CONSTRAINT b1 check (b<123456789012345678901234567890123456789012345678901234567890123456789)
) ENGINE=InnoDB; ) ENGINE=InnoDB;
--sorted_result --sorted_result
SELECT * from information_schema.check_constraints; SELECT * from information_schema.check_constraints;

View File

@ -1,3 +1,5 @@
connection node_1;
connection node_2;
connection node_2; connection node_2;
connection node_1; connection node_1;
connection node_1; connection node_1;

View File

@ -8,9 +8,10 @@
--source include/galera_cluster.inc --source include/galera_cluster.inc
--source include/galera_have_debug_sync.inc --source include/galera_have_debug_sync.inc
# Save original auto_increment_offset values.
--let $node_1=node_1 --let $node_1=node_1
--let $node_2=node_2 --let $node_2=node_2
--source suite/galera/include/auto_increment_offset_save.inc --source include/auto_increment_offset_save.inc
# Force node_2 gcomm background thread to terminate via exception. # Force node_2 gcomm background thread to terminate via exception.
--connection node_2 --connection node_2
@ -41,4 +42,4 @@ SET SESSION wsrep_on=0;
--connection node_2 --connection node_2
CALL mtr.add_suppression("WSREP: exception from gcomm, backend must be restarted: Gcomm backend termination was requested by setting gmcast.isolate=2."); CALL mtr.add_suppression("WSREP: exception from gcomm, backend must be restarted: Gcomm backend termination was requested by setting gmcast.isolate=2.");
--source suite/galera/include/auto_increment_offset_restore.inc --source include/auto_increment_offset_restore.inc

View File

@ -790,3 +790,31 @@ t1 CREATE TABLE `t1` (
ALTER TABLE t1 DROP INDEX f1; ALTER TABLE t1 DROP INDEX f1;
ALTER TABLE t1 DROP f3; ALTER TABLE t1 DROP f3;
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-24041 Generated column DELETE with FOREIGN KEY crash InnoDB
#
CREATE TABLE emails (
id int,
PRIMARY KEY (id)
) ENGINE=InnoDB;
CREATE TABLE email_stats (
id int,
email_id int,
date_sent char(4),
generated_email_id int as (email_id),
PRIMARY KEY (id),
KEY mautic_generated_sent_date_email_id (generated_email_id),
FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE SET NULL
) ENGINE=InnoDB;
CREATE TABLE emails_metadata (
email_id int,
PRIMARY KEY (email_id),
CONSTRAINT FK FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE CASCADE
) ENGINE=InnoDB;
INSERT INTO emails VALUES (1);
INSERT INTO email_stats (id, email_id, date_sent) VALUES (1,1,'Jan');
INSERT INTO emails_metadata VALUES (1);
DELETE FROM emails;
DROP TABLE email_stats;
DROP TABLE emails_metadata;
DROP TABLE emails;

View File

@ -649,3 +649,40 @@ SHOW CREATE TABLE t1;
ALTER TABLE t1 DROP INDEX f1; ALTER TABLE t1 DROP INDEX f1;
ALTER TABLE t1 DROP f3; ALTER TABLE t1 DROP f3;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-24041 Generated column DELETE with FOREIGN KEY crash InnoDB
--echo #
CREATE TABLE emails (
id int,
PRIMARY KEY (id)
) ENGINE=InnoDB;
CREATE TABLE email_stats (
id int,
email_id int,
date_sent char(4),
generated_email_id int as (email_id),
PRIMARY KEY (id),
KEY mautic_generated_sent_date_email_id (generated_email_id),
FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE SET NULL
) ENGINE=InnoDB;
CREATE TABLE emails_metadata (
email_id int,
PRIMARY KEY (email_id),
CONSTRAINT FK FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE CASCADE
) ENGINE=InnoDB;
INSERT INTO emails VALUES (1);
INSERT INTO email_stats (id, email_id, date_sent) VALUES (1,1,'Jan');
INSERT INTO emails_metadata VALUES (1);
DELETE FROM emails;
DROP TABLE email_stats;
DROP TABLE emails_metadata;
DROP TABLE emails;

View File

@ -81,4 +81,5 @@ CREATE TABLE t1(f1 INT) ENGINE=INNODB;
INSERT INTO t1 VALUES(1); INSERT INTO t1 VALUES(1);
UPDATE (SELECT ((SELECT 1 FROM t1), 1) FROM t1 WHERE (SELECT 1 FROM t1)) x, (SELECT 1) AS d SET d.f1 = 1; UPDATE (SELECT ((SELECT 1 FROM t1), 1) FROM t1 WHERE (SELECT 1 FROM t1)) x, (SELECT 1) AS d SET d.f1 = 1;
ERROR 21000: Operand should contain 1 column(s) ERROR 21000: Operand should contain 1 column(s)
UPDATE (SELECT ((SELECT 1 FROM t1),1) = (1,1) FROM t1 WHERE (SELECT 1 FROM t1)) x, t1 AS d SET d.f1 = 1;
DROP TABLE t1; DROP TABLE t1;

View File

@ -35,4 +35,5 @@ CREATE TABLE t1(f1 INT) ENGINE=INNODB;
INSERT INTO t1 VALUES(1); INSERT INTO t1 VALUES(1);
--error ER_OPERAND_COLUMNS --error ER_OPERAND_COLUMNS
UPDATE (SELECT ((SELECT 1 FROM t1), 1) FROM t1 WHERE (SELECT 1 FROM t1)) x, (SELECT 1) AS d SET d.f1 = 1; UPDATE (SELECT ((SELECT 1 FROM t1), 1) FROM t1 WHERE (SELECT 1 FROM t1)) x, (SELECT 1) AS d SET d.f1 = 1;
UPDATE (SELECT ((SELECT 1 FROM t1),1) = (1,1) FROM t1 WHERE (SELECT 1 FROM t1)) x, t1 AS d SET d.f1 = 1;
DROP TABLE t1; DROP TABLE t1;

View File

@ -9,7 +9,6 @@ source include/have_innodb.inc;
source include/master-slave.inc; source include/master-slave.inc;
let $engine_type= InnoDB; let $engine_type= InnoDB;
#let $engine_type= MyISAM;
# Suppress warnings that might be generated during the test # Suppress warnings that might be generated during the test
connection master; connection master;
@ -94,7 +93,6 @@ enable_query_log;
echo [ status of semi-sync on master should be OFF ]; echo [ status of semi-sync on master should be OFF ];
show status like 'Rpl_semi_sync_master_clients'; show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
--replace_result 305 304
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
# reset master to make sure the following test will start with a clean environment # reset master to make sure the following test will start with a clean environment
@ -201,16 +199,23 @@ connection slave;
source include/stop_slave.inc; source include/stop_slave.inc;
connection master; connection master;
--source include/kill_binlog_dump_threads.inc
set global rpl_semi_sync_master_timeout= 5000; set global rpl_semi_sync_master_timeout= 5000;
# The first semi-sync check should be on because after slave stop, # The first semi-sync check should be on because after slave stop,
# there are no transactions on the master. # there are no transactions on the master.
echo [ master status should be ON ]; echo [ master status should be ON ];
show status like 'Rpl_semi_sync_master_status';
let $status_var= Rpl_semi_sync_master_status;
let $status_var_value= ON;
source include/wait_for_status_var.inc;
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
--replace_result 305 304
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
show status like 'Rpl_semi_sync_master_clients';
echo [ semi-sync replication of these transactions will fail ]; echo [ semi-sync replication of these transactions will fail ];
insert into t1 values (500); insert into t1 values (500);
@ -225,7 +230,6 @@ source include/wait_for_status_var.inc;
echo [ master status should be OFF ]; echo [ master status should be OFF ];
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
--replace_result 305 304
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
# Semi-sync status on master is now OFF, so all these transactions # Semi-sync status on master is now OFF, so all these transactions
@ -246,7 +250,6 @@ insert into t1 values (100);
echo [ master status should be OFF ]; echo [ master status should be OFF ];
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
--replace_result 305 304
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
--echo # --echo #
@ -274,9 +277,11 @@ connection master;
# The master semi-sync status should be on again after slave catches up. # The master semi-sync status should be on again after slave catches up.
echo [ master status should be ON again after slave catches up ]; echo [ master status should be ON again after slave catches up ];
show status like 'Rpl_semi_sync_master_status';
let $status_var= Rpl_semi_sync_master_status;
let $status_var_value= ON;
source include/wait_for_status_var.inc;
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
--replace_result 305 304
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
show status like 'Rpl_semi_sync_master_clients'; show status like 'Rpl_semi_sync_master_clients';
@ -332,11 +337,7 @@ replace_result $engine_type ENGINE_TYPE;
eval create table t1 (a int) engine = $engine_type; eval create table t1 (a int) engine = $engine_type;
drop table t1; drop table t1;
##show status like 'Rpl_semi_sync_master_status';
sync_slave_with_master; sync_slave_with_master;
--replace_column 2 #
show status like 'Rpl_relay%';
echo [ test reset master ]; echo [ test reset master ];
connection master; connection master;
@ -353,19 +354,7 @@ source include/stop_slave.inc;
reset slave; reset slave;
# Kill the dump thread on master for previous slave connection and # Kill the dump thread on master for previous slave connection and
# wait for it to exit --source include/kill_binlog_dump_threads.inc
connection master;
let $_tid= `select id from information_schema.processlist where command = 'Binlog Dump' limit 1`;
if ($_tid)
{
--replace_result $_tid _tid
eval kill query $_tid;
# After dump thread exit, Rpl_semi_sync_master_clients will be 0
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;
}
connection slave; connection slave;
source include/start_slave.inc; source include/start_slave.inc;
@ -404,17 +393,7 @@ connection master;
reset master; reset master;
# Kill the dump thread on master for previous slave connection and wait for it to exit # Kill the dump thread on master for previous slave connection and wait for it to exit
let $_tid= `select id from information_schema.processlist where command = 'Binlog Dump' limit 1`; --source include/kill_binlog_dump_threads.inc
if ($_tid)
{
--replace_result $_tid _tid
eval kill query $_tid;
# After dump thread exit, Rpl_semi_sync_master_clients will be 0
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;
}
# Do not binlog the following statement because it will generate # Do not binlog the following statement because it will generate
# different events for ROW and STATEMENT format # different events for ROW and STATEMENT format
@ -459,21 +438,16 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
connection master; connection master;
# Kill the dump thread on master for previous slave connection and wait for it to exit # Kill the dump thread on master for previous slave connection and wait for it to exit
let $_tid= `select id from information_schema.processlist where command = 'Binlog Dump' limit 1`; --source include/kill_binlog_dump_threads.inc
if ($_tid)
{
--replace_result $_tid _tid
eval kill query $_tid;
# After dump thread exit, Rpl_semi_sync_master_clients will be 0
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;
}
echo [ Semi-sync status on master should be ON ]; echo [ Semi-sync status on master should be ON ];
show status like 'Rpl_semi_sync_master_clients'; let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
let $status_var= Rpl_semi_sync_master_status;
let $status_var_value= ON;
source include/wait_for_status_var.inc;
set global rpl_semi_sync_master_enabled= 0; set global rpl_semi_sync_master_enabled= 0;
connection slave; connection slave;

View File

@ -164,20 +164,15 @@ connection slave;
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
connection master; connection master;
include/kill_binlog_dump_threads.inc
set global rpl_semi_sync_master_timeout= 5000; set global rpl_semi_sync_master_timeout= 5000;
[ master status should be ON ] [ master status should be ON ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 0 Rpl_semi_sync_master_no_tx 0
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_yes_tx 14 Rpl_semi_sync_master_yes_tx 14
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
[ semi-sync replication of these transactions will fail ] [ semi-sync replication of these transactions will fail ]
insert into t1 values (500); insert into t1 values (500);
[ master status should be OFF ] [ master status should be OFF ]
@ -235,9 +230,6 @@ max(a)
500 500
connection master; connection master;
[ master status should be ON again after slave catches up ] [ master status should be ON again after slave catches up ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 12 Rpl_semi_sync_master_no_tx 12
@ -304,8 +296,6 @@ connection master;
create table t1 (a int) engine = ENGINE_TYPE; create table t1 (a int) engine = ENGINE_TYPE;
drop table t1; drop table t1;
connection slave; connection slave;
show status like 'Rpl_relay%';
Variable_name Value
[ test reset master ] [ test reset master ]
connection master; connection master;
reset master; reset master;
@ -321,7 +311,7 @@ Rpl_semi_sync_master_yes_tx 0
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
reset slave; reset slave;
connection master; include/kill_binlog_dump_threads.inc
connection slave; connection slave;
include/start_slave.inc include/start_slave.inc
connection master; connection master;
@ -353,6 +343,7 @@ include/stop_slave.inc
reset slave; reset slave;
connection master; connection master;
reset master; reset master;
include/kill_binlog_dump_threads.inc
set sql_log_bin=0; set sql_log_bin=0;
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password'; grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
flush privileges; flush privileges;
@ -403,10 +394,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_slave_status OFF Rpl_semi_sync_slave_status OFF
connection master; connection master;
include/kill_binlog_dump_threads.inc
[ Semi-sync status on master should be ON ] [ Semi-sync status on master should be ON ]
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_status ON Rpl_semi_sync_master_status ON

View File

@ -165,20 +165,15 @@ connection slave;
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
connection master; connection master;
include/kill_binlog_dump_threads.inc
set global rpl_semi_sync_master_timeout= 5000; set global rpl_semi_sync_master_timeout= 5000;
[ master status should be ON ] [ master status should be ON ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 0 Rpl_semi_sync_master_no_tx 0
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_yes_tx 16 Rpl_semi_sync_master_yes_tx 16
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
[ semi-sync replication of these transactions will fail ] [ semi-sync replication of these transactions will fail ]
insert into t1 values (500); insert into t1 values (500);
[ master status should be OFF ] [ master status should be OFF ]
@ -236,9 +231,6 @@ max(a)
500 500
connection master; connection master;
[ master status should be ON again after slave catches up ] [ master status should be ON again after slave catches up ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 12 Rpl_semi_sync_master_no_tx 12
@ -305,8 +297,6 @@ connection master;
create table t1 (a int) engine = ENGINE_TYPE; create table t1 (a int) engine = ENGINE_TYPE;
drop table t1; drop table t1;
connection slave; connection slave;
show status like 'Rpl_relay%';
Variable_name Value
[ test reset master ] [ test reset master ]
connection master; connection master;
reset master; reset master;
@ -322,7 +312,7 @@ Rpl_semi_sync_master_yes_tx 0
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
reset slave; reset slave;
connection master; include/kill_binlog_dump_threads.inc
connection slave; connection slave;
include/start_slave.inc include/start_slave.inc
connection master; connection master;
@ -354,6 +344,7 @@ include/stop_slave.inc
reset slave; reset slave;
connection master; connection master;
reset master; reset master;
include/kill_binlog_dump_threads.inc
set sql_log_bin=0; set sql_log_bin=0;
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password'; grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
flush privileges; flush privileges;
@ -404,10 +395,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_slave_status OFF Rpl_semi_sync_slave_status OFF
connection master; connection master;
include/kill_binlog_dump_threads.inc
[ Semi-sync status on master should be ON ] [ Semi-sync status on master should be ON ]
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_status ON Rpl_semi_sync_master_status ON

View File

@ -165,20 +165,15 @@ connection slave;
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
connection master; connection master;
include/kill_binlog_dump_threads.inc
set global rpl_semi_sync_master_timeout= 5000; set global rpl_semi_sync_master_timeout= 5000;
[ master status should be ON ] [ master status should be ON ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 0 Rpl_semi_sync_master_no_tx 0
show status like 'Rpl_semi_sync_master_yes_tx'; show status like 'Rpl_semi_sync_master_yes_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_yes_tx 14 Rpl_semi_sync_master_yes_tx 14
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
[ semi-sync replication of these transactions will fail ] [ semi-sync replication of these transactions will fail ]
insert into t1 values (500); insert into t1 values (500);
[ master status should be OFF ] [ master status should be OFF ]
@ -236,9 +231,6 @@ max(a)
500 500
connection master; connection master;
[ master status should be ON again after slave catches up ] [ master status should be ON again after slave catches up ]
show status like 'Rpl_semi_sync_master_status';
Variable_name Value
Rpl_semi_sync_master_status ON
show status like 'Rpl_semi_sync_master_no_tx'; show status like 'Rpl_semi_sync_master_no_tx';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_no_tx 12 Rpl_semi_sync_master_no_tx 12
@ -305,8 +297,6 @@ connection master;
create table t1 (a int) engine = ENGINE_TYPE; create table t1 (a int) engine = ENGINE_TYPE;
drop table t1; drop table t1;
connection slave; connection slave;
show status like 'Rpl_relay%';
Variable_name Value
[ test reset master ] [ test reset master ]
connection master; connection master;
reset master; reset master;
@ -322,7 +312,7 @@ Rpl_semi_sync_master_yes_tx 0
connection slave; connection slave;
include/stop_slave.inc include/stop_slave.inc
reset slave; reset slave;
connection master; include/kill_binlog_dump_threads.inc
connection slave; connection slave;
include/start_slave.inc include/start_slave.inc
connection master; connection master;
@ -354,6 +344,7 @@ include/stop_slave.inc
reset slave; reset slave;
connection master; connection master;
reset master; reset master;
include/kill_binlog_dump_threads.inc
set sql_log_bin=0; set sql_log_bin=0;
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password'; grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
flush privileges; flush privileges;
@ -404,10 +395,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_slave_status OFF Rpl_semi_sync_slave_status OFF
connection master; connection master;
include/kill_binlog_dump_threads.inc
[ Semi-sync status on master should be ON ] [ Semi-sync status on master should be ON ]
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 0
show status like 'Rpl_semi_sync_master_status'; show status like 'Rpl_semi_sync_master_status';
Variable_name Value Variable_name Value
Rpl_semi_sync_master_status ON Rpl_semi_sync_master_status ON

View File

@ -436,6 +436,9 @@ SET @@DEBUG_SYNC='now SIGNAL proceed_by_1000';
--connection spoiler_21 --connection spoiler_21
ROLLBACK; ROLLBACK;
--let $wait_condition= SELECT count(*)=1 FROM information_schema.processlist WHERE state LIKE '%debug sync point%';
--source include/wait_condition.inc
--echo # Release the 2nd worker to proceed --echo # Release the 2nd worker to proceed
--connection spoiler_22 --connection spoiler_22
ROLLBACK; ROLLBACK;

View File

@ -1,199 +0,0 @@
SET @start_global_value = @@global.max_sort_length;
SELECT @start_global_value;
@start_global_value
1024
SET @start_session_value = @@session.max_sort_length;
SELECT @start_session_value;
@start_session_value
1024
'#--------------------FN_DYNVARS_084_01-------------------------#'
SET @@global.max_sort_length = 1000;
SET @@global.max_sort_length = DEFAULT;
SELECT @@global.max_sort_length;
@@global.max_sort_length
1024
SET @@session.max_sort_length = 1000;
SET @@session.max_sort_length = DEFAULT;
SELECT @@session.max_sort_length;
@@session.max_sort_length
1024
'#--------------------FN_DYNVARS_084_02-------------------------#'
SET @@global.max_sort_length = DEFAULT;
SELECT @@global.max_sort_length = 1024;
@@global.max_sort_length = 1024
1
SET @@session.max_sort_length = DEFAULT;
SELECT @@session.max_sort_length = 1024;
@@session.max_sort_length = 1024
1
'#--------------------FN_DYNVARS_084_03-------------------------#'
SET @@global.max_sort_length = 8;
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
SET @@global.max_sort_length = 9;
SELECT @@global.max_sort_length;
@@global.max_sort_length
9
SET @@global.max_sort_length = 8388608;
SELECT @@global.max_sort_length;
@@global.max_sort_length
8388608
SET @@global.max_sort_length = 8388607;
SELECT @@global.max_sort_length;
@@global.max_sort_length
8388607
SET @@global.max_sort_length = 65536;
SELECT @@global.max_sort_length;
@@global.max_sort_length
65536
'#--------------------FN_DYNVARS_084_04-------------------------#'
SET @@session.max_sort_length = 8;
SELECT @@session.max_sort_length;
@@session.max_sort_length
8
SET @@session.max_sort_length = 9;
SELECT @@session.max_sort_length;
@@session.max_sort_length
9
SET @@session.max_sort_length = 8388608;
SELECT @@session.max_sort_length;
@@session.max_sort_length
8388608
SET @@session.max_sort_length = 8388607;
SELECT @@session.max_sort_length;
@@session.max_sort_length
8388607
SET @@session.max_sort_length = 65536;
SELECT @@session.max_sort_length;
@@session.max_sort_length
65536
'#------------------FN_DYNVARS_084_05-----------------------#'
SET @@global.max_sort_length = -1024;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '-1024'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
SET @@global.max_sort_length = 3;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '3'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
SET @@global.max_sort_length = 8388609;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8388609'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8388608
SET @@global.max_sort_length = 0;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '0'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
SET @@global.max_sort_length = 65530.34;
ERROR 42000: Incorrect argument type to variable 'max_sort_length'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
SET @@global.max_sort_length = test;
ERROR 42000: Incorrect argument type to variable 'max_sort_length'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
SET @@session.max_sort_length = 8388610;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '8388610'
SELECT @@session.max_sort_length;
@@session.max_sort_length
8388608
SET @@session.max_sort_length = -1;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '-1'
SELECT @@session.max_sort_length;
@@session.max_sort_length
8
SET @@session.max_sort_length = 3;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '3'
SELECT @@session.max_sort_length;
@@session.max_sort_length
8
SET @@session.max_sort_length = 0;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '0'
SELECT @@session.max_sort_length;
@@session.max_sort_length
8
SET @@session.max_sort_length = 65530.34;
ERROR 42000: Incorrect argument type to variable 'max_sort_length'
SET @@session.max_sort_length = 10737418241;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '10737418241'
SELECT @@session.max_sort_length;
@@session.max_sort_length
8388608
SET @@session.max_sort_length = test;
ERROR 42000: Incorrect argument type to variable 'max_sort_length'
SELECT @@session.max_sort_length;
@@session.max_sort_length
8388608
'#------------------FN_DYNVARS_084_06-----------------------#'
SELECT @@global.max_sort_length = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='max_sort_length';
@@global.max_sort_length = VARIABLE_VALUE
1
'#------------------FN_DYNVARS_084_07-----------------------#'
SELECT @@session.max_sort_length = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
WHERE VARIABLE_NAME='max_sort_length';
@@session.max_sort_length = VARIABLE_VALUE
1
'#------------------FN_DYNVARS_084_08-----------------------#'
SET @@global.max_sort_length = TRUE;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '1'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
SET @@global.max_sort_length = FALSE;
Warnings:
Warning 1292 Truncated incorrect max_sort_length value: '0'
SELECT @@global.max_sort_length;
@@global.max_sort_length
8
'#---------------------FN_DYNVARS_084_09----------------------#'
SET @@global.max_sort_length = 2048;
SELECT @@max_sort_length = @@global.max_sort_length;
@@max_sort_length = @@global.max_sort_length
0
'#---------------------FN_DYNVARS_084_10----------------------#'
SET @@max_sort_length = 100000;
SELECT @@max_sort_length = @@local.max_sort_length;
@@max_sort_length = @@local.max_sort_length
1
SELECT @@local.max_sort_length = @@session.max_sort_length;
@@local.max_sort_length = @@session.max_sort_length
1
'#---------------------FN_DYNVARS_084_11----------------------#'
SET max_sort_length = 1024;
SELECT @@max_sort_length;
@@max_sort_length
1024
SELECT local.max_sort_length;
ERROR 42S02: Unknown table 'local' in field list
SELECT session.max_sort_length;
ERROR 42S02: Unknown table 'session' in field list
SELECT max_sort_length = @@session.max_sort_length;
ERROR 42S22: Unknown column 'max_sort_length' in 'field list'
SET @@global.max_sort_length = @start_global_value;
SELECT @@global.max_sort_length;
@@global.max_sort_length
1024
SET @@session.max_sort_length = @start_session_value;
SELECT @@session.max_sort_length;
@@session.max_sort_length
1024

View File

@ -1,301 +1,279 @@
SET @start_value= @@global.max_sort_length; SET @start_value= @@global.max_sort_length;
SET @session_max_sort_length = @@Session.max_sort_length;
DROP TABLE IF EXISTS t;
** creating tables ** ** creating tables **
CREATE TABLE t CREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
( CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY, c BLOB);
id INT AUTO_INCREMENT PRIMARY KEY, CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
c TEXT(30)
);
CREATE TABLE t1
(
id INT AUTO_INCREMENT PRIMARY KEY,
c BLOB(30)
);
CREATE TABLE t2
(
id INT AUTO_INCREMENT PRIMARY KEY,
c TEXT(30)
);
'#--------------------FN_DYNVARS_098_01-------------------------#' '#--------------------FN_DYNVARS_098_01-------------------------#'
connect test_con1,localhost,root,,; connect test_con1,localhost,root,,;
connection test_con1; ** Setting value to 70 and inserting data **
SELECT @@global.max_sort_length = 10; SET @@global.max_sort_length = 70;
@@global.max_sort_length = 10
0
SELECT @@session.max_sort_length = 10;
@@session.max_sort_length = 10
0
** Setting value to 30 and inserting data **
SET @@global.max_sort_length = 30;
SELECT @@global.max_sort_length; SELECT @@global.max_sort_length;
@@global.max_sort_length @@global.max_sort_length
30 70
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
** Results should be sorted ** ** Results should be sorted **
SET @@session.max_sort_length = 29; SET @@session.max_sort_length = 69;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
@@session.max_sort_length @@session.max_sort_length
29 69
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
** Results should be sorted ** ** Results should be sorted **
'#--------------------FN_DYNVARS_098_02-------------------------#' '#--------------------FN_DYNVARS_098_02-------------------------#'
connect test_con2,localhost,root,,; connect test_con2,localhost,root,,;
connection test_con2; SET @@global.max_sort_length = 70;
SET @@global.max_sort_length = 30;
SELECT @@global.max_sort_length; SELECT @@global.max_sort_length;
@@global.max_sort_length @@global.max_sort_length
30 70
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
** Results should be sorted ** ** Results should be sorted **
SET @@session.max_sort_length = 20; SET @@session.max_sort_length = 64;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
@@session.max_sort_length @@session.max_sort_length
20 64
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
** Results should not be sorted ** ** Results should not be sorted **
'#--------------------FN_DYNVARS_098_03-------------------------#' '#--------------------FN_DYNVARS_098_03-------------------------#'
SET max_sort_length=20; SET max_sort_length=64;
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
** Results should not be sorted ** ** Results should not be sorted **
RESET QUERY CACHE; RESET QUERY CACHE;
'#--------------------FN_DYNVARS_098_04-------------------------#' '#--------------------FN_DYNVARS_098_04-------------------------#'
SET max_sort_length=29; SET max_sort_length=69;
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
** Results should be sorted ** ** Results should be sorted **
'#--------------------FN_DYNVARS_098_05-------------------------#' '#--------------------FN_DYNVARS_098_05-------------------------#'
SET max_sort_length=30; SET max_sort_length=70;
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
** Results should be sorted ** ** Results should be sorted **
'#--------------------FN_DYNVARS_098_06-------------------------#' '#--------------------FN_DYNVARS_098_06-------------------------#'
SET max_sort_length=default; SET max_sort_length=default;
SELECT @@max_sort_length;
@@max_sort_length
70
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
** Results should be sorted ** ** Results should be sorted **
'#--------------------FN_DYNVARS_098_07-------------------------#' '#--------------------FN_DYNVARS_098_07-------------------------#'
Testing type BLOB Testing type BLOB
SET @@global.max_sort_length = 30; SET @@max_sort_length = 70;
SELECT @@global.max_sort_length; SELECT @@max_sort_length;
@@global.max_sort_length @@max_sort_length
30 70
INSERT INTO t1 set c = repeat('x',29); INSERT INTO t1 set c = repeat('x',69);
INSERT INTO t1 set c = concat(repeat('x',28),'r','x'); INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
INSERT INTO t1 set c = concat(repeat('x',28),'s','y'); INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
INSERT INTO t1 set c = concat(repeat('x',28),'g','w'); INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
SELECT c from t1 ORDER BY c, id; SELECT c from t1 ORDER BY c, id DESC;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
** Results should be sorted ** ** Results should be sorted **
SET @@session.max_sort_length = 20; SET @@session.max_sort_length = 64;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
@@session.max_sort_length @@session.max_sort_length
20 64
INSERT INTO t1 set c = repeat('x',29); INSERT INTO t1 set c = repeat('x',69);
INSERT INTO t1 set c = concat(repeat('x',28),'r','x'); INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
INSERT INTO t1 set c = concat(repeat('x',28),'s','y'); INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
INSERT INTO t1 set c = concat(repeat('x',28),'g','w'); INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
SELECT c from t1 ORDER BY c, id; SELECT c from t1 ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
** Results should not be sorted ** ** Results should not be sorted **
'#--------------------FN_DYNVARS_098_08-------------------------#' '#--------------------FN_DYNVARS_098_08-------------------------#'
Testing type CHAR Testing type CHAR
SET @@global.max_sort_length = 30; SET @@global.max_sort_length = 70;
SELECT @@global.max_sort_length; SELECT @@global.max_sort_length;
@@global.max_sort_length @@global.max_sort_length
30 70
INSERT INTO t2 set c = repeat('x',29); INSERT INTO t2 set c = repeat('x',69);
INSERT INTO t2 set c = concat(repeat('x',28),'r','x'); INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
INSERT INTO t2 set c = concat(repeat('x',28),'s','y'); INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
INSERT INTO t2 set c = concat(repeat('x',28),'g','w'); INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
SELECT c from t2 ORDER BY c, id; SELECT c from t2 ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
** Results should not be sorted ** ** Results should not be sorted **
SET @@session.max_sort_length = 20; SET @@session.max_sort_length = 64;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
@@session.max_sort_length @@session.max_sort_length
20 64
INSERT INTO t2 set c = repeat('x',29); INSERT INTO t2 set c = repeat('x',69);
INSERT INTO t2 set c = concat(repeat('x',28),'r','x'); INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
INSERT INTO t2 set c = concat(repeat('x',28),'s','y'); INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
INSERT INTO t2 set c = concat(repeat('x',28),'g','w'); INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
SELECT c from t2 ORDER BY c, id; SELECT c from t2 ORDER BY c, id;
c c
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
** Results should not be sorted ** ** Results should not be sorted **
connection default; connection default;
disconnect test_con1; disconnect test_con1;
disconnect test_con2; disconnect test_con2;
SET @@SESSION.max_sort_length = @session_max_sort_length; DROP TABLE t, t1, t2;
DROP TABLE IF EXISTS t;
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
SET @@global.max_sort_length= @start_value; SET @@global.max_sort_length= @start_value;

View File

@ -1044,10 +1044,10 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME GROUP_CONCAT_MAX_LEN VARIABLE_NAME GROUP_CONCAT_MAX_LEN
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE INT UNSIGNED
VARIABLE_COMMENT The maximum length of the result of function GROUP_CONCAT() VARIABLE_COMMENT The maximum length of the result of function GROUP_CONCAT()
NUMERIC_MIN_VALUE 4 NUMERIC_MIN_VALUE 4
NUMERIC_MAX_VALUE 18446744073709551615 NUMERIC_MAX_VALUE 4294967295
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@ -1946,7 +1946,7 @@ VARIABLE_NAME MAX_SORT_LENGTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored) VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored)
NUMERIC_MIN_VALUE 8 NUMERIC_MIN_VALUE 64
NUMERIC_MAX_VALUE 8388608 NUMERIC_MAX_VALUE 8388608
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL

View File

@ -1064,10 +1064,10 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME GROUP_CONCAT_MAX_LEN VARIABLE_NAME GROUP_CONCAT_MAX_LEN
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE INT UNSIGNED
VARIABLE_COMMENT The maximum length of the result of function GROUP_CONCAT() VARIABLE_COMMENT The maximum length of the result of function GROUP_CONCAT()
NUMERIC_MIN_VALUE 4 NUMERIC_MIN_VALUE 4
NUMERIC_MAX_VALUE 18446744073709551615 NUMERIC_MAX_VALUE 4294967295
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@ -2106,7 +2106,7 @@ VARIABLE_NAME MAX_SORT_LENGTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored) VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored)
NUMERIC_MIN_VALUE 8 NUMERIC_MIN_VALUE 64
NUMERIC_MAX_VALUE 8388608 NUMERIC_MAX_VALUE 8388608
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL

View File

@ -1,225 +0,0 @@
############## mysql-test\t\max_sort_length_basic.test ###############
# #
# Variable Name: max_sort_length #
# Scope: GLOBAL | SESSION #
# Access Type: Dynamic #
# Data Type: numeric #
# Default Value: 1024 #
# Range: 4-8388608 #
# #
# #
# Creation Date: 2008-02-07 #
# Author: Salman #
# #
# Description: Test Cases of Dynamic System Variable max_sort_length #
# that checks the behavior of this variable in the following ways#
# * Default Value #
# * Valid & Invalid values #
# * Scope & Access method #
# * Data Integrity #
# #
# Reference: http://dev.mysql.com/doc/refman/5.1/en/ #
# server-system-variables.html #
# #
###############################################################################
--source include/load_sysvars.inc
############################################
# START OF max_sort_length TESTS #
############################################
#############################################################
# Save initial value #
#############################################################
SET @start_global_value = @@global.max_sort_length;
SELECT @start_global_value;
SET @start_session_value = @@session.max_sort_length;
SELECT @start_session_value;
--echo '#--------------------FN_DYNVARS_084_01-------------------------#'
#######################################################
# Display the DEFAULT value of max_sort_length #
#######################################################
SET @@global.max_sort_length = 1000;
SET @@global.max_sort_length = DEFAULT;
SELECT @@global.max_sort_length;
SET @@session.max_sort_length = 1000;
SET @@session.max_sort_length = DEFAULT;
SELECT @@session.max_sort_length;
--echo '#--------------------FN_DYNVARS_084_02-------------------------#'
#######################################################
# Check the DEFAULT value of max_sort_length #
#######################################################
SET @@global.max_sort_length = DEFAULT;
SELECT @@global.max_sort_length = 1024;
SET @@session.max_sort_length = DEFAULT;
SELECT @@session.max_sort_length = 1024;
--echo '#--------------------FN_DYNVARS_084_03-------------------------#'
#########################################################################
# Change the value of max_sort_length to a valid value for GLOBAL Scope #
#########################################################################
SET @@global.max_sort_length = 8;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = 9;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = 8388608;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = 8388607;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = 65536;
SELECT @@global.max_sort_length;
--echo '#--------------------FN_DYNVARS_084_04-------------------------#'
##########################################################################
# Change the value of max_sort_length to a valid value for SESSION Scope #
##########################################################################
SET @@session.max_sort_length = 8;
SELECT @@session.max_sort_length;
SET @@session.max_sort_length = 9;
SELECT @@session.max_sort_length;
SET @@session.max_sort_length = 8388608;
SELECT @@session.max_sort_length;
SET @@session.max_sort_length = 8388607;
SELECT @@session.max_sort_length;
SET @@session.max_sort_length = 65536;
SELECT @@session.max_sort_length;
--echo '#------------------FN_DYNVARS_084_05-----------------------#'
###########################################################
# Change the value of max_sort_length to an invalid value #
###########################################################
SET @@global.max_sort_length = -1024;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = 3;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = 8388609;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = 0;
SELECT @@global.max_sort_length;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.max_sort_length = 65530.34;
SELECT @@global.max_sort_length;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.max_sort_length = test;
SELECT @@global.max_sort_length;
SET @@session.max_sort_length = 8388610;
SELECT @@session.max_sort_length;
SET @@session.max_sort_length = -1;
SELECT @@session.max_sort_length;
SET @@session.max_sort_length = 3;
SELECT @@session.max_sort_length;
SET @@session.max_sort_length = 0;
SELECT @@session.max_sort_length;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@session.max_sort_length = 65530.34;
SET @@session.max_sort_length = 10737418241;
SELECT @@session.max_sort_length;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@session.max_sort_length = test;
SELECT @@session.max_sort_length;
--echo '#------------------FN_DYNVARS_084_06-----------------------#'
####################################################################
# Check if the value in GLOBAL Table matches value in variable #
####################################################################
SELECT @@global.max_sort_length = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='max_sort_length';
--echo '#------------------FN_DYNVARS_084_07-----------------------#'
####################################################################
# Check if the value in SESSION Table matches value in variable #
####################################################################
SELECT @@session.max_sort_length = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
WHERE VARIABLE_NAME='max_sort_length';
--echo '#------------------FN_DYNVARS_084_08-----------------------#'
####################################################################
# Check if TRUE and FALSE values can be used on variable #
####################################################################
SET @@global.max_sort_length = TRUE;
SELECT @@global.max_sort_length;
SET @@global.max_sort_length = FALSE;
SELECT @@global.max_sort_length;
--echo '#---------------------FN_DYNVARS_084_09----------------------#'
#################################################################################
# Check if accessing variable with and without GLOBAL point to same variable #
#################################################################################
SET @@global.max_sort_length = 2048;
SELECT @@max_sort_length = @@global.max_sort_length;
--echo '#---------------------FN_DYNVARS_084_10----------------------#'
########################################################################################################
# Check if accessing variable with SESSION,LOCAL and without SCOPE points to same session variable #
########################################################################################################
SET @@max_sort_length = 100000;
SELECT @@max_sort_length = @@local.max_sort_length;
SELECT @@local.max_sort_length = @@session.max_sort_length;
--echo '#---------------------FN_DYNVARS_084_11----------------------#'
##########################################################################
# Check if max_sort_length can be accessed with and without @@ sign #
##########################################################################
SET max_sort_length = 1024;
SELECT @@max_sort_length;
--Error ER_UNKNOWN_TABLE
SELECT local.max_sort_length;
--Error ER_UNKNOWN_TABLE
SELECT session.max_sort_length;
--Error ER_BAD_FIELD_ERROR
SELECT max_sort_length = @@session.max_sort_length;
####################################
# Restore initial value #
####################################
SET @@global.max_sort_length = @start_global_value;
SELECT @@global.max_sort_length;
SET @@session.max_sort_length = @start_session_value;
SELECT @@session.max_sort_length;
####################################################
# END OF max_sort_length TESTS #
####################################################

View File

@ -26,70 +26,40 @@
SET @start_value= @@global.max_sort_length; SET @start_value= @@global.max_sort_length;
SET @session_max_sort_length = @@Session.max_sort_length;
--disable_warnings
DROP TABLE IF EXISTS t;
--enable_warnings
######################### #########################
# Creating new table # # Creating new table #
######################### #########################
--echo ** creating tables ** --echo ** creating tables **
CREATE TABLE t CREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
( CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY, c BLOB);
id INT AUTO_INCREMENT PRIMARY KEY, CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
c TEXT(30)
);
CREATE TABLE t1
(
id INT AUTO_INCREMENT PRIMARY KEY,
c BLOB(30)
);
CREATE TABLE t2
(
id INT AUTO_INCREMENT PRIMARY KEY,
c TEXT(30)
);
--echo '#--------------------FN_DYNVARS_098_01-------------------------#' --echo '#--------------------FN_DYNVARS_098_01-------------------------#'
########################################################## ##########################################################
# Test behavior of variable on new connection # 01 # # Test behavior of variable on new connection # 01 #
########################################################## ##########################################################
connect (test_con1,localhost,root,,); connect (test_con1,localhost,root,,);
connection test_con1;
# Value of session & global vairable here should be 10
SELECT @@global.max_sort_length = 10;
SELECT @@session.max_sort_length = 10;
# Setting global value of variable and inserting data in table # Setting global value of variable and inserting data in table
--echo ** Setting value to 30 and inserting data ** --echo ** Setting value to 70 and inserting data **
SET @@global.max_sort_length = 30; SET @@global.max_sort_length = 70;
SELECT @@global.max_sort_length; SELECT @@global.max_sort_length;
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should be sorted ** --echo ** Results should be sorted **
# Setting session value of variable and inserting data in table # Setting session value of variable and inserting data in table
SET @@session.max_sort_length = 29; SET @@session.max_sort_length = 69;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should be sorted ** --echo ** Results should be sorted **
@ -99,72 +69,69 @@ SELECT c from t ORDER BY c, id;
########################################################## ##########################################################
connect (test_con2,localhost,root,,); connect (test_con2,localhost,root,,);
connection test_con2;
## Setting global value of variable and inserting data in table ## Setting global value of variable and inserting data in table
SET @@global.max_sort_length = 30; SET @@global.max_sort_length = 70;
SELECT @@global.max_sort_length; SELECT @@global.max_sort_length;
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should be sorted ** --echo ** Results should be sorted **
# Setting session value of variable and inserting data in table # Setting session value of variable and inserting data in table
SET @@session.max_sort_length = 20; SET @@session.max_sort_length = 64;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should not be sorted ** --echo ** Results should not be sorted **
--echo '#--------------------FN_DYNVARS_098_03-------------------------#' --echo '#--------------------FN_DYNVARS_098_03-------------------------#'
######################################################### #########################################################
#Check if sorting is applied with the max_sort_length=20# #Check if sorting is applied with the max_sort_length=64#
######################################################### #########################################################
########################################### ###########################################
# Setting new value for max_sort_length # # Setting new value for max_sort_length #
########################################### ###########################################
SET max_sort_length=20; SET max_sort_length=64;
################################### ###################################
# Inserting values in table t # # Inserting values in table t #
################################### ###################################
INSERT INTO t set c = repeat('x',29); INSERT INTO t set c = repeat('x',69);
INSERT INTO t set c = concat(repeat('x',28),'r','x'); INSERT INTO t set c = concat(repeat('x',68),'r','x');
INSERT INTO t set c = concat(repeat('x',28),'s','y'); INSERT INTO t set c = concat(repeat('x',68),'s','y');
INSERT INTO t set c = concat(repeat('x',28),'g','w'); INSERT INTO t set c = concat(repeat('x',68),'g','w');
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should not be sorted ** --echo ** Results should not be sorted **
RESET QUERY CACHE; RESET QUERY CACHE;
--echo '#--------------------FN_DYNVARS_098_04-------------------------#' --echo '#--------------------FN_DYNVARS_098_04-------------------------#'
######################################################### #########################################################
#Check if sorting is applied with the max_sort_length=29# #Check if sorting is applied with the max_sort_length=69#
######################################################### #########################################################
SET max_sort_length=29; SET max_sort_length=69;
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should be sorted ** --echo ** Results should be sorted **
--echo '#--------------------FN_DYNVARS_098_05-------------------------#' --echo '#--------------------FN_DYNVARS_098_05-------------------------#'
######################################################### #########################################################
#Check if sorting is applied with the max_sort_length=30# #Check if sorting is applied with the max_sort_length=70#
######################################################### #########################################################
SET max_sort_length=30; SET max_sort_length=70;
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should be sorted ** --echo ** Results should be sorted **
@ -173,34 +140,33 @@ SELECT c from t ORDER BY c, id;
#Check if sorting is applied with the max_sort_length=Default# #Check if sorting is applied with the max_sort_length=Default#
############################################################## ##############################################################
SET max_sort_length=default; SET max_sort_length=default;
SELECT @@max_sort_length;
SELECT c from t ORDER BY c, id; SELECT c from t ORDER BY c, id;
--echo ** Results should be sorted ** --echo ** Results should be sorted **
--echo '#--------------------FN_DYNVARS_098_07-------------------------#' --echo '#--------------------FN_DYNVARS_098_07-------------------------#'
########################################### ###########################################
#Check if sorting is applied on BLOB type # #Check if sorting is applied on BLOB type #
########################################### ###########################################
--echo Testing type BLOB --echo Testing type BLOB
# Setting global value of variable and inserting data in table # Setting global value of variable and inserting data in table
SET @@global.max_sort_length = 30; SET @@max_sort_length = 70;
SELECT @@global.max_sort_length; SELECT @@max_sort_length;
INSERT INTO t1 set c = repeat('x',29); INSERT INTO t1 set c = repeat('x',69);
INSERT INTO t1 set c = concat(repeat('x',28),'r','x'); INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
INSERT INTO t1 set c = concat(repeat('x',28),'s','y'); INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
INSERT INTO t1 set c = concat(repeat('x',28),'g','w'); INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
SELECT c from t1 ORDER BY c, id; SELECT c from t1 ORDER BY c, id DESC;
--echo ** Results should be sorted ** --echo ** Results should be sorted **
# Setting session value of variable and inserting data in table # Setting session value of variable and inserting data in table
SET @@session.max_sort_length = 20; SET @@session.max_sort_length = 64;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
INSERT INTO t1 set c = repeat('x',29); INSERT INTO t1 set c = repeat('x',69);
INSERT INTO t1 set c = concat(repeat('x',28),'r','x'); INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
INSERT INTO t1 set c = concat(repeat('x',28),'s','y'); INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
INSERT INTO t1 set c = concat(repeat('x',28),'g','w'); INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
SELECT c from t1 ORDER BY c, id; SELECT c from t1 ORDER BY c, id;
--echo ** Results should not be sorted ** --echo ** Results should not be sorted **
@ -210,26 +176,25 @@ SELECT c from t1 ORDER BY c, id;
########################################### ###########################################
--echo Testing type CHAR --echo Testing type CHAR
# Setting global value of variable and inserting data in table # Setting global value of variable and inserting data in table
SET @@global.max_sort_length = 30; SET @@global.max_sort_length = 70;
SELECT @@global.max_sort_length; SELECT @@global.max_sort_length;
INSERT INTO t2 set c = repeat('x',29); INSERT INTO t2 set c = repeat('x',69);
INSERT INTO t2 set c = concat(repeat('x',28),'r','x'); INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
INSERT INTO t2 set c = concat(repeat('x',28),'s','y'); INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
INSERT INTO t2 set c = concat(repeat('x',28),'g','w'); INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
SELECT c from t2 ORDER BY c, id; SELECT c from t2 ORDER BY c, id;
--echo ** Results should not be sorted ** --echo ** Results should not be sorted **
# Setting session value of variable and inserting data in table # Setting session value of variable and inserting data in table
SET @@session.max_sort_length = 20; SET @@session.max_sort_length = 64;
SELECT @@session.max_sort_length; SELECT @@session.max_sort_length;
INSERT INTO t2 set c = repeat('x',29); INSERT INTO t2 set c = repeat('x',69);
INSERT INTO t2 set c = concat(repeat('x',28),'r','x'); INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
INSERT INTO t2 set c = concat(repeat('x',28),'s','y'); INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
INSERT INTO t2 set c = concat(repeat('x',28),'g','w'); INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
SELECT c from t2 ORDER BY c, id; SELECT c from t2 ORDER BY c, id;
--echo ** Results should not be sorted ** --echo ** Results should not be sorted **
# #
# Cleanup # Cleanup
# #
@ -239,12 +204,6 @@ connection default;
disconnect test_con1; disconnect test_con1;
disconnect test_con2; disconnect test_con2;
SET @@SESSION.max_sort_length = @session_max_sort_length; DROP TABLE t, t1, t2;
--disable_warnings
DROP TABLE IF EXISTS t;
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
--enable_warnings
SET @@global.max_sort_length= @start_value; SET @@global.max_sort_length= @start_value;

View File

@ -170,7 +170,7 @@ static pid_t pid;
static char addr2line_binary[1024]; static char addr2line_binary[1024];
static char output[1024]; static char output[1024];
static struct pollfd poll_fds; static struct pollfd poll_fds;
Dl_info info; static Dl_info info;
int start_addr2line_fork(const char *binary_path) int start_addr2line_fork(const char *binary_path)
{ {

View File

@ -126,7 +126,7 @@ log_generic () {
case $logging in case $logging in
init) ;; # Just echo the message, don't save it anywhere init) ;; # Just echo the message, don't save it anywhere
file) file)
if [ -n "$helper" ]; then if [ "$helper_exist" -eq "0" ]; then
echo "$msg" | "$helper" "$user" log "$err_log" echo "$msg" | "$helper" "$user" log "$err_log"
fi fi
;; ;;
@ -150,7 +150,7 @@ eval_log_error () {
local cmd="$1" local cmd="$1"
case $logging in case $logging in
file) file)
if [ -n "$helper" ]; then if [ "$helper_exist" -eq "0" ]; then
cmd="$cmd 2>&1 | "`shell_quote_string "$helper"`" $user log "`shell_quote_string "$err_log"` cmd="$cmd 2>&1 | "`shell_quote_string "$helper"`" $user log "`shell_quote_string "$err_log"`
fi fi
;; ;;
@ -533,10 +533,9 @@ fi
helper=`find_in_bin mysqld_safe_helper` helper=`find_in_bin mysqld_safe_helper`
print_defaults=`find_in_bin my_print_defaults` print_defaults=`find_in_bin my_print_defaults`
# Check if helper exists # Check if helper exists
$helper --help >/dev/null 2>&1 || helper="" command -v $helper --help >/dev/null 2>&1
helper_exist=$?
# #
# Second, try to find the data directory # Second, try to find the data directory
# #
@ -943,7 +942,6 @@ fi
# Avoid 'nohup: ignoring input' warning # Avoid 'nohup: ignoring input' warning
test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null" test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null"
log_notice "Starting $MYSQLD daemon with databases from $DATADIR" log_notice "Starting $MYSQLD daemon with databases from $DATADIR"
# variable to track the current number of "fast" (a.k.a. subsecond) restarts # variable to track the current number of "fast" (a.k.a. subsecond) restarts

View File

@ -8494,7 +8494,7 @@ int Field_blob::store(const char *from,size_t length,CHARSET_INFO *cs)
DBUG_ASSERT(length <= max_data_length()); DBUG_ASSERT(length <= max_data_length());
new_length= length; new_length= length;
copy_length= (size_t)MY_MIN(UINT_MAX,table->in_use->variables.group_concat_max_len); copy_length= table->in_use->variables.group_concat_max_len;
if (new_length > copy_length) if (new_length > copy_length)
{ {
new_length= Well_formed_prefix(cs, new_length= Well_formed_prefix(cs,

View File

@ -1394,8 +1394,6 @@ public:
virtual uint max_packed_col_length(uint max_length) virtual uint max_packed_col_length(uint max_length)
{ return max_length;} { return max_length;}
virtual bool is_packable() const { return false; }
uint offset(const uchar *record) const uint offset(const uchar *record) const
{ {
return (uint) (ptr - record); return (uint) (ptr - record);
@ -1988,7 +1986,6 @@ public:
bool can_optimize_range(const Item_bool_func *cond, bool can_optimize_range(const Item_bool_func *cond,
const Item *item, const Item *item,
bool is_eq_func) const; bool is_eq_func) const;
bool is_packable() const { return true; }
}; };
/* base class for float and double and decimal (old one) */ /* base class for float and double and decimal (old one) */

View File

@ -1978,14 +1978,7 @@ sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
if (sortorder->field) if (sortorder->field)
{ {
CHARSET_INFO *cs= sortorder->field->sort_charset(); CHARSET_INFO *cs= sortorder->field->sort_charset();
sortorder->type= sortorder->field->is_packable() ?
SORT_FIELD_ATTR::VARIABLE_SIZE :
SORT_FIELD_ATTR::FIXED_SIZE;
sortorder->length= sortorder->field->sort_length(); sortorder->length= sortorder->field->sort_length();
if (sortorder->is_variable_sized())
set_if_smaller(sortorder->length, thd->variables.max_sort_length);
if (use_strnxfrm((cs=sortorder->field->sort_charset()))) if (use_strnxfrm((cs=sortorder->field->sort_charset())))
{ {
*multi_byte_charset= true; *multi_byte_charset= true;
@ -1996,10 +1989,6 @@ sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
} }
else else
{ {
sortorder->type= sortorder->item->type_handler()->is_packable() ?
SORT_FIELD_ATTR::VARIABLE_SIZE :
SORT_FIELD_ATTR::FIXED_SIZE;
sortorder->item->type_handler()->sortlength(thd, sortorder->item, sortorder->item->type_handler()->sortlength(thd, sortorder->item,
sortorder); sortorder);
if (use_strnxfrm(sortorder->item->collation.collation)) if (use_strnxfrm(sortorder->item->collation.collation))
@ -2009,8 +1998,7 @@ sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
if (sortorder->item->maybe_null) if (sortorder->item->maybe_null)
length++; // Place for NULL marker length++; // Place for NULL marker
} }
if (sortorder->is_variable_sized()) set_if_smaller(sortorder->length, thd->variables.max_sort_length);
set_if_smaller(sortorder->length, thd->variables.max_sort_length);
length+=sortorder->length; length+=sortorder->length;
} }
sortorder->field= (Field*) 0; // end marker sortorder->field= (Field*) 0; // end marker

View File

@ -3322,6 +3322,13 @@ int handler::update_auto_increment()
(table->auto_increment_field_not_null && (table->auto_increment_field_not_null &&
thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO)) thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO))
{ {
/*
There could be an error reported because value was truncated
when strict mode is enabled.
*/
if (thd->is_error())
DBUG_RETURN(HA_ERR_AUTOINC_ERANGE);
/* /*
Update next_insert_id if we had already generated a value in this Update next_insert_id if we had already generated a value in this
statement (case of INSERT VALUES(null),(3763),(null): statement (case of INSERT VALUES(null),(3763),(null):

View File

@ -5473,6 +5473,7 @@ void Item_func_like::print(String *str, enum_query_type query_type)
longlong Item_func_like::val_int() longlong Item_func_like::val_int()
{ {
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
DBUG_ASSERT(escape != -1);
String* res= args[0]->val_str(&cmp_value1); String* res= args[0]->val_str(&cmp_value1);
if (args[0]->null_value) if (args[0]->null_value)
{ {
@ -5559,15 +5560,29 @@ bool fix_escape_item(THD *thd, Item *escape_item, String *tmp_str,
bool escape_used_in_parsing, CHARSET_INFO *cmp_cs, bool escape_used_in_parsing, CHARSET_INFO *cmp_cs,
int *escape) int *escape)
{ {
if (!escape_item->const_during_execution()) /*
ESCAPE clause accepts only constant arguments and Item_param.
Subqueries during context_analysis_only might decide they're
const_during_execution, but not quite const yet, not evaluate-able.
This is fine, as most of context_analysis_only modes will never
reach val_int(), so we won't need the value.
CONTEXT_ANALYSIS_ONLY_DERIVED being a notable exception here.
*/
if (!escape_item->const_during_execution() ||
(!escape_item->const_item() &&
!(thd->lex->context_analysis_only & ~CONTEXT_ANALYSIS_ONLY_DERIVED)))
{ {
my_error(ER_WRONG_ARGUMENTS,MYF(0),"ESCAPE"); my_error(ER_WRONG_ARGUMENTS,MYF(0),"ESCAPE");
return TRUE; return TRUE;
} }
IF_DBUG(*escape= -1,);
if (escape_item->const_item()) if (escape_item->const_item())
{ {
/* If we are on execution stage */ /* If we are on execution stage */
/* XXX is it safe to evaluate is_expensive() items here? */
String *escape_str= escape_item->val_str(tmp_str); String *escape_str= escape_item->val_str(tmp_str);
if (escape_str) if (escape_str)
{ {

View File

@ -2787,6 +2787,13 @@ public:
return this; return this;
} }
bool walk(Item_processor processor, bool walk_subquery, void *arg)
{
return walk_args(processor, walk_subquery, arg)
|| escape_item->walk(processor, walk_subquery, arg)
|| (this->*processor)(arg);
}
bool find_selective_predicates_list_processor(void *arg); bool find_selective_predicates_list_processor(void *arg);
Item *get_copy(THD *thd) Item *get_copy(THD *thd)

View File

@ -3619,7 +3619,7 @@ int dump_leaf_key(void* key_arg, element_count count __attribute__((unused)),
{ {
Item_func_group_concat *item= (Item_func_group_concat *) item_arg; Item_func_group_concat *item= (Item_func_group_concat *) item_arg;
TABLE *table= item->table; TABLE *table= item->table;
uint max_length= (uint)table->in_use->variables.group_concat_max_len; uint max_length= table->in_use->variables.group_concat_max_len;
String tmp((char *)table->record[1], table->s->reclength, String tmp((char *)table->record[1], table->s->reclength,
default_charset_info); default_charset_info);
String tmp2; String tmp2;
@ -3960,7 +3960,7 @@ bool Item_func_group_concat::repack_tree(THD *thd)
DBUG_ASSERT(tree->size_of_element == st.tree.size_of_element); DBUG_ASSERT(tree->size_of_element == st.tree.size_of_element);
st.table= table; st.table= table;
st.len= 0; st.len= 0;
st.maxlen= (size_t)thd->variables.group_concat_max_len; st.maxlen= thd->variables.group_concat_max_len;
tree_walk(tree, &copy_to_tree, &st, left_root_right); tree_walk(tree, &copy_to_tree, &st, left_root_right);
if (st.len <= st.maxlen) // Copying aborted. Must be OOM if (st.len <= st.maxlen) // Copying aborted. Must be OOM
{ {
@ -3981,7 +3981,7 @@ bool Item_func_group_concat::repack_tree(THD *thd)
decreases up to N=10 (that is, factor=1024) and then starts to increase, decreases up to N=10 (that is, factor=1024) and then starts to increase,
again, very slowly. again, very slowly.
*/ */
#define GCONCAT_REPACK_FACTOR (1 << 10) #define GCONCAT_REPACK_FACTOR 10
bool Item_func_group_concat::add() bool Item_func_group_concat::add()
{ {
@ -4027,7 +4027,7 @@ bool Item_func_group_concat::add()
{ {
THD *thd= table->in_use; THD *thd= table->in_use;
table->field[0]->store(row_str_len, FALSE); table->field[0]->store(row_str_len, FALSE);
if (tree_len > thd->variables.group_concat_max_len * GCONCAT_REPACK_FACTOR if ((tree_len >> GCONCAT_REPACK_FACTOR) > thd->variables.group_concat_max_len
&& tree->elements_in_tree > 1) && tree->elements_in_tree > 1)
if (repack_tree(thd)) if (repack_tree(thd))
return 1; return 1;
@ -4082,9 +4082,9 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref)
result.set_charset(collation.collation); result.set_charset(collation.collation);
result_field= 0; result_field= 0;
null_value= 1; null_value= 1;
max_length= (uint32)(thd->variables.group_concat_max_len max_length= (uint32)MY_MIN(thd->variables.group_concat_max_len
/ collation.collation->mbminlen / collation.collation->mbminlen
* collation.collation->mbmaxlen); * collation.collation->mbmaxlen, UINT_MAX32);
uint32 offset; uint32 offset;
if (separator->needs_conversion(separator->length(), separator->charset(), if (separator->needs_conversion(separator->length(), separator->charset(),

View File

@ -7800,9 +7800,9 @@ SEL_TREE *Item_func_in::get_func_mm_tree(RANGE_OPT_PARAM *param,
{ {
key_map::Iterator it(field->key_start); key_map::Iterator it(field->key_start);
uint key_no; uint key_no;
while ((key_no= it.next_bit()) != key_map::Iterator::BITMAP_END) while ((key_no= it++) != key_map::Iterator::BITMAP_END)
{ {
KEY *key_info= &param->table->key_info[key_no]; KEY *key_info= &field->table->key_info[key_no];
if (key_info->user_defined_key_parts == 1 && if (key_info->user_defined_key_parts == 1 &&
(key_info->flags & HA_NOSAME)) (key_info->flags & HA_NOSAME))
{ {

View File

@ -6231,6 +6231,7 @@ find_field_in_table_ref(THD *thd, TABLE_LIST *table_list,
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
/* Check if there are sufficient access rights to the found field. */ /* Check if there are sufficient access rights to the found field. */
if (check_privileges && if (check_privileges &&
!table_list->is_derived() &&
check_column_grant_in_table_ref(thd, *actual_table, name, length, fld)) check_column_grant_in_table_ref(thd, *actual_table, name, length, fld))
fld= WRONG_GRANT; fld= WRONG_GRANT;
else else
@ -8092,36 +8093,23 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
/* /*
Ensure that we have access rights to all fields to be inserted. Under Ensure that we have access rights to all fields to be inserted
some circumstances, this check may be skipped. the table 'tables'. Under some circumstances, this check may be skipped.
- If any_privileges is true, skip the check. The check is skipped in the following cases:
- If the SELECT privilege has been found as fulfilled already for both - any_privileges is true
the TABLE and TABLE_LIST objects (and both of these exist, of
course), the check is skipped.
- If the SELECT privilege has been found fulfilled for the TABLE object - the table is a derived table
and the TABLE_LIST represents a derived table other than a view (see
below), the check is skipped.
- If the TABLE_LIST object represents a view, we may skip checking if - the table is a view with SELECT privilege
the SELECT privilege has been found fulfilled for it, regardless of
the TABLE object.
- If there is no TABLE object, the test is skipped if either - the table is a base table with SELECT privilege
* the TABLE_LIST does not represent a view, or
* the SELECT privilege has been found fulfilled.
A TABLE_LIST that is not a view may be a subquery, an
information_schema table, or a nested table reference. See the comment
for TABLE_LIST.
*/ */
if (!((table && tables->is_non_derived() && if (!any_privileges &&
(table->grant.privilege & SELECT_ACL)) || !tables->is_derived() &&
((!tables->is_non_derived() && !(tables->is_view() && (tables->grant.privilege & SELECT_ACL)) &&
(tables->grant.privilege & SELECT_ACL)))) && !(table && (table->grant.privilege & SELECT_ACL)))
!any_privileges)
{ {
field_iterator.set(tables); field_iterator.set(tables);
if (check_grant_all_columns(thd, SELECT_ACL, &field_iterator)) if (check_grant_all_columns(thd, SELECT_ACL, &field_iterator))

View File

@ -1449,7 +1449,7 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
DBUG_PRINT("qcache", ("\ DBUG_PRINT("qcache", ("\
long %d, 4.1: %d, eof: %d, bin_proto: %d, more results %d, pkt_nr: %d, \ long %d, 4.1: %d, eof: %d, bin_proto: %d, more results %d, pkt_nr: %d, \
CS client: %u, CS result: %u, CS conn: %u, limit: %llu, TZ: %p, \ CS client: %u, CS result: %u, CS conn: %u, limit: %llu, TZ: %p, \
sql mode: 0x%llx, sort len: %llu, conncat len: %llu, div_precision: %zu, \ sql mode: 0x%llx, sort len: %llu, concat len: %u, div_precision: %zu, \
def_week_frmt: %zu, in_trans: %d, autocommit: %d", def_week_frmt: %zu, in_trans: %d, autocommit: %d",
(int)flags.client_long_flag, (int)flags.client_long_flag,
(int)flags.client_protocol_41, (int)flags.client_protocol_41,
@ -1949,7 +1949,7 @@ Query_cache::send_result_to_client(THD *thd, char *org_sql, uint query_length)
DBUG_PRINT("qcache", ("\ DBUG_PRINT("qcache", ("\
long %d, 4.1: %d, eof: %d, bin_proto: %d, more results %d, pkt_nr: %d, \ long %d, 4.1: %d, eof: %d, bin_proto: %d, more results %d, pkt_nr: %d, \
CS client: %u, CS result: %u, CS conn: %u, limit: %llu, TZ: %p, \ CS client: %u, CS result: %u, CS conn: %u, limit: %llu, TZ: %p, \
sql mode: 0x%llx, sort len: %llu, conncat len: %llu, div_precision: %zu, \ sql mode: 0x%llx, sort len: %llu, concat len: %u, div_precision: %zu, \
def_week_frmt: %zu, in_trans: %d, autocommit: %d", def_week_frmt: %zu, in_trans: %d, autocommit: %d",
(int)flags.client_long_flag, (int)flags.client_long_flag,
(int)flags.client_protocol_41, (int)flags.client_protocol_41,

View File

@ -558,11 +558,11 @@ struct Query_cache_query_flags
uint character_set_client_num; uint character_set_client_num;
uint character_set_results_num; uint character_set_results_num;
uint collation_connection_num; uint collation_connection_num;
uint group_concat_max_len;
ha_rows limit; ha_rows limit;
Time_zone *time_zone; Time_zone *time_zone;
sql_mode_t sql_mode; sql_mode_t sql_mode;
ulonglong max_sort_length; ulonglong max_sort_length;
ulonglong group_concat_max_len;
size_t default_week_format; size_t default_week_format;
size_t div_precision_increment; size_t div_precision_increment;
MY_LOCALE *lc_time_names; MY_LOCALE *lc_time_names;

View File

@ -592,7 +592,6 @@ typedef struct system_variables
ulonglong bulk_insert_buff_size; ulonglong bulk_insert_buff_size;
ulonglong join_buff_size; ulonglong join_buff_size;
ulonglong sortbuff_size; ulonglong sortbuff_size;
ulonglong group_concat_max_len;
ulonglong default_regex_flags; ulonglong default_regex_flags;
ulonglong max_mem_used; ulonglong max_mem_used;
@ -685,6 +684,8 @@ typedef struct system_variables
uint32 gtid_domain_id; uint32 gtid_domain_id;
uint64 gtid_seq_no; uint64 gtid_seq_no;
uint group_concat_max_len;
/** /**
Default transaction access mode. READ ONLY (true) or READ WRITE (false). Default transaction access mode. READ ONLY (true) or READ WRITE (false).
*/ */
@ -5787,10 +5788,15 @@ class select_union_recursive :public select_unit
public: public:
/* The temporary table with the new records generated by one iterative step */ /* The temporary table with the new records generated by one iterative step */
TABLE *incr_table; TABLE *incr_table;
/* The TMP_TABLE_PARAM structure used to create incr_table */
TMP_TABLE_PARAM incr_table_param;
/* One of tables from the list rec_tables (determined dynamically) */ /* One of tables from the list rec_tables (determined dynamically) */
TABLE *first_rec_table_to_update; TABLE *first_rec_table_to_update;
/* The temporary tables used for recursive table references */ /*
List<TABLE> rec_tables; The list of all recursive table references to the CTE for whose
specification this select_union_recursive was created
*/
List<TABLE_LIST> rec_table_refs;
/* /*
The count of how many times cleanup() was called with cleaned==false The count of how many times cleanup() was called with cleaned==false
for the unit specifying the recursive CTE for which this object was created for the unit specifying the recursive CTE for which this object was created
@ -5800,7 +5806,8 @@ class select_union_recursive :public select_unit
select_union_recursive(THD *thd_arg): select_union_recursive(THD *thd_arg):
select_unit(thd_arg), select_unit(thd_arg),
incr_table(0), first_rec_table_to_update(0), cleanup_count(0) {}; incr_table(0), first_rec_table_to_update(0), cleanup_count(0)
{ incr_table_param.init(); };
int send_data(List<Item> &items); int send_data(List<Item> &items);
bool create_result_table(THD *thd, List<Item> *column_types, bool create_result_table(THD *thd, List<Item> *column_types,
@ -6095,8 +6102,6 @@ struct SORT_FIELD_ATTR
{ {
uint length; /* Length of sort field */ uint length; /* Length of sort field */
uint suffix_length; /* Length suffix (0-4) */ uint suffix_length; /* Length suffix (0-4) */
enum Type { FIXED_SIZE, VARIABLE_SIZE } type;
bool is_variable_sized() { return type == VARIABLE_SIZE; }
}; };

View File

@ -252,6 +252,8 @@ With_element *With_clause::find_table_def(TABLE_LIST *table,
!table->is_fqtn) !table->is_fqtn)
{ {
table->set_derived(); table->set_derived();
table->db.str= empty_c_string;
table->db.length= 0;
return with_elem; return with_elem;
} }
} }
@ -887,8 +889,6 @@ st_select_lex_unit *With_element::clone_parsed_spec(THD *thd,
goto err; goto err;
spec_tables_tail= tbl; spec_tables_tail= tbl;
} }
if (check_table_access(thd, SELECT_ACL, spec_tables, FALSE, UINT_MAX, FALSE))
goto err;
if (spec_tables) if (spec_tables)
{ {
if (with_table->next_global) if (with_table->next_global)
@ -914,6 +914,22 @@ st_select_lex_unit *With_element::clone_parsed_spec(THD *thd,
with_select)); with_select));
if (check_dependencies_in_with_clauses(lex->with_clauses_list)) if (check_dependencies_in_with_clauses(lex->with_clauses_list))
res= NULL; res= NULL;
/*
Resolve references to CTE from the spec_tables list that has not
been resolved yet.
*/
for (TABLE_LIST *tbl= spec_tables;
tbl;
tbl= tbl->next_global)
{
if (!tbl->with)
tbl->with= with_select->find_table_def_in_with_clauses(tbl);
if (tbl == spec_tables_tail)
break;
}
if (check_table_access(thd, SELECT_ACL, spec_tables, FALSE, UINT_MAX, FALSE))
goto err;
lex->sphead= NULL; // in order not to delete lex->sphead lex->sphead= NULL; // in order not to delete lex->sphead
lex_end(lex); lex_end(lex);
err: err:
@ -1466,10 +1482,11 @@ void With_element::print(String *str, enum_query_type query_type)
bool With_element::instantiate_tmp_tables() bool With_element::instantiate_tmp_tables()
{ {
List_iterator_fast<TABLE> li(rec_result->rec_tables); List_iterator_fast<TABLE_LIST> li(rec_result->rec_table_refs);
TABLE *rec_table; TABLE_LIST *rec_tbl;
while ((rec_table= li++)) while ((rec_tbl= li++))
{ {
TABLE *rec_table= rec_tbl->table;
if (!rec_table->is_created() && if (!rec_table->is_created() &&
instantiate_tmp_table(rec_table, instantiate_tmp_table(rec_table,
rec_table->s->key_info, rec_table->s->key_info,

View File

@ -710,7 +710,7 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
if (derived->is_with_table_recursive_reference()) if (derived->is_with_table_recursive_reference())
{ {
/* Here 'derived" is a secondary recursive table reference */ /* Here 'derived" is a secondary recursive table reference */
unit->with_element->rec_result->rec_tables.push_back(derived->table); unit->with_element->rec_result->rec_table_refs.push_back(derived);
} }
} }
DBUG_ASSERT(derived->table || res); DBUG_ASSERT(derived->table || res);
@ -808,17 +808,17 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
derived->fill_me= FALSE; derived->fill_me= FALSE;
if (!(derived->derived_result= new (thd->mem_root) select_unit(thd))) if ((!derived->is_with_table_recursive_reference() ||
!derived->derived_result) &&
!(derived->derived_result= new (thd->mem_root) select_unit(thd)))
DBUG_RETURN(TRUE); // out of memory DBUG_RETURN(TRUE); // out of memory
lex->context_analysis_only|= CONTEXT_ANALYSIS_ONLY_DERIVED;
// st_select_lex_unit::prepare correctly work for single select // st_select_lex_unit::prepare correctly work for single select
if ((res= unit->prepare(derived, derived->derived_result, 0))) if ((res= unit->prepare(derived, derived->derived_result, 0)))
goto exit; goto exit;
if (derived->with && if (derived->with &&
(res= derived->with->rename_columns_of_derived_unit(thd, unit))) (res= derived->with->rename_columns_of_derived_unit(thd, unit)))
goto exit; goto exit;
lex->context_analysis_only&= ~CONTEXT_ANALYSIS_ONLY_DERIVED;
if ((res= check_duplicate_names(thd, unit->types, 0))) if ((res= check_duplicate_names(thd, unit->types, 0)))
goto exit; goto exit;
@ -827,7 +827,8 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
Depending on the result field translation will or will not Depending on the result field translation will or will not
be created. be created.
*/ */
if (derived->init_derived(thd, FALSE)) if (!derived->is_with_table_recursive_reference() &&
derived->init_derived(thd, FALSE))
goto exit; goto exit;
/* /*

View File

@ -742,6 +742,9 @@ static bool mysqld_help_internal(THD *thd, const char *mask)
&name, &description, &example); &name, &description, &example);
delete select; delete select;
if (thd->is_error())
goto error;
if (count_topics == 0) if (count_topics == 0)
{ {
int UNINIT_VAR(key_id); int UNINIT_VAR(key_id);

View File

@ -6805,6 +6805,9 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
bool check_single_table_access(THD *thd, ulong privilege, TABLE_LIST *tables, bool check_single_table_access(THD *thd, ulong privilege, TABLE_LIST *tables,
bool no_errors) bool no_errors)
{ {
if (tables->derived)
return 0;
Switch_to_definer_security_ctx backup_sctx(thd, tables); Switch_to_definer_security_ctx backup_sctx(thd, tables);
const char *db_name; const char *db_name;

View File

@ -13363,10 +13363,6 @@ void JOIN_TAB::cleanup()
{ {
DBUG_ENTER("JOIN_TAB::cleanup"); DBUG_ENTER("JOIN_TAB::cleanup");
if (tab_list && tab_list->is_with_table_recursive_reference() &&
tab_list->with->is_cleaned())
DBUG_VOID_RETURN;
DBUG_PRINT("enter", ("tab: %p table %s.%s", DBUG_PRINT("enter", ("tab: %p table %s.%s",
this, this,
(table ? table->s->db.str : "?"), (table ? table->s->db.str : "?"),

View File

@ -9861,7 +9861,7 @@ ST_FIELD_INFO check_constraints_fields_info[]=
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0, OPEN_FULL_TABLE}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0, OPEN_FULL_TABLE},
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0, {"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0,
OPEN_FULL_TABLE}, OPEN_FULL_TABLE},
{"CHECK_CLAUSE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0, {"CHECK_CLAUSE", MAX_FIELD_VARCHARLENGTH , MYSQL_TYPE_STRING, 0, 0, 0,
OPEN_FULL_TABLE}, OPEN_FULL_TABLE},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
}; };

View File

@ -3655,8 +3655,6 @@ public:
const Type_std_attributes *item, const Type_std_attributes *item,
SORT_FIELD_ATTR *attr) const= 0; SORT_FIELD_ATTR *attr) const= 0;
virtual bool is_packable() const { return false; }
virtual uint32 max_display_length(const Item *item) const= 0; virtual uint32 max_display_length(const Item *item) const= 0;
virtual uint32 Item_decimal_notation_int_digits(const Item *item) const { return 0; } virtual uint32 Item_decimal_notation_int_digits(const Item *item) const { return 0; }
virtual uint32 calc_pack_length(uint32 length) const= 0; virtual uint32 calc_pack_length(uint32 length) const= 0;
@ -4816,8 +4814,6 @@ public:
const Type_std_attributes *item, const Type_std_attributes *item,
SORT_FIELD_ATTR *attr) const; SORT_FIELD_ATTR *attr) const;
bool is_packable()const { return true; }
bool union_element_finalize(const Item * item) const; bool union_element_finalize(const Item * item) const;
bool Column_definition_prepare_stage1(THD *thd, bool Column_definition_prepare_stage1(THD *thd,

View File

@ -405,7 +405,10 @@ select_union_recursive::create_result_table(THD *thd_arg,
hidden)) hidden))
return true; return true;
if (! (incr_table= create_tmp_table(thd_arg, &tmp_table_param, *column_types, incr_table_param.init();
incr_table_param.field_count= column_types->elements;
incr_table_param.bit_fields_as_long= bit_fields_as_long;
if (! (incr_table= create_tmp_table(thd_arg, &incr_table_param, *column_types,
(ORDER*) 0, false, 1, (ORDER*) 0, false, 1,
options, HA_POS_ERROR, &empty_clex_str, options, HA_POS_ERROR, &empty_clex_str,
true, keep_row_order))) true, keep_row_order)))
@ -415,20 +418,6 @@ select_union_recursive::create_result_table(THD *thd_arg,
for (uint i=0; i < table->s->fields; i++) for (uint i=0; i < table->s->fields; i++)
incr_table->field[i]->flags &= ~(PART_KEY_FLAG | PART_INDIRECT_KEY_FLAG); incr_table->field[i]->flags &= ~(PART_KEY_FLAG | PART_INDIRECT_KEY_FLAG);
TABLE *rec_table= 0;
if (! (rec_table= create_tmp_table(thd_arg, &tmp_table_param, *column_types,
(ORDER*) 0, false, 1,
options, HA_POS_ERROR, alias,
true, keep_row_order)))
return true;
rec_table->keys_in_use_for_query.clear_all();
for (uint i=0; i < table->s->fields; i++)
rec_table->field[i]->flags &= ~(PART_KEY_FLAG | PART_INDIRECT_KEY_FLAG);
if (rec_tables.push_back(rec_table))
return true;
return false; return false;
} }
@ -466,10 +455,11 @@ void select_union_recursive::cleanup()
free_tmp_table(thd, incr_table); free_tmp_table(thd, incr_table);
} }
List_iterator<TABLE> it(rec_tables); List_iterator<TABLE_LIST> it(rec_table_refs);
TABLE *tab; TABLE_LIST *tbl;
while ((tab= it++)) while ((tbl= it++))
{ {
TABLE *tab= tbl->table;
if (tab->is_created()) if (tab->is_created())
{ {
tab->file->extra(HA_EXTRA_RESET_STATE); tab->file->extra(HA_EXTRA_RESET_STATE);
@ -483,6 +473,7 @@ void select_union_recursive::cleanup()
*/ */
tab->next= thd->rec_tables; tab->next= thd->rec_tables;
thd->rec_tables= tab; thd->rec_tables= tab;
tbl->derived_result= 0;
} }
} }
@ -1138,9 +1129,33 @@ bool st_select_lex_unit::prepare(TABLE_LIST *derived_arg,
goto err; goto err;
if (!derived_arg->table) if (!derived_arg->table)
{ {
derived_arg->table= with_element->rec_result->rec_tables.head(); bool res= false;
if (derived_arg->derived_result)
derived_arg->derived_result->table= derived_arg->table; if ((!derived_arg->is_with_table_recursive_reference() ||
!derived_arg->derived_result) &&
!(derived_arg->derived_result=
new (thd->mem_root) select_unit(thd)))
goto err; // out of memory
thd->create_tmp_table_for_derived= TRUE;
res= derived_arg->derived_result->create_result_table(thd,
&types,
FALSE,
create_options,
&derived_arg->alias,
FALSE, FALSE,
FALSE, 0);
thd->create_tmp_table_for_derived= FALSE;
if (res)
goto err;
derived_arg->derived_result->set_unit(this);
derived_arg->table= derived_arg->derived_result->table;
if (derived_arg->is_with_table_recursive_reference())
{
/* Here 'derived_arg' is the primary recursive table reference */
derived_arg->with->rec_result->
rec_table_refs.push_back(derived_arg);
}
} }
with_element->mark_as_with_prepared_anchor(); with_element->mark_as_with_prepared_anchor();
is_rec_result_table_created= true; is_rec_result_table_created= true;
@ -1783,11 +1798,11 @@ bool st_select_lex_unit::exec_recursive()
TABLE *incr_table= with_element->rec_result->incr_table; TABLE *incr_table= with_element->rec_result->incr_table;
st_select_lex *end= NULL; st_select_lex *end= NULL;
bool is_unrestricted= with_element->is_unrestricted(); bool is_unrestricted= with_element->is_unrestricted();
List_iterator_fast<TABLE> li(with_element->rec_result->rec_tables); List_iterator_fast<TABLE_LIST> li(with_element->rec_result->rec_table_refs);
TMP_TABLE_PARAM *tmp_table_param= &with_element->rec_result->tmp_table_param; TMP_TABLE_PARAM *tmp_table_param= &with_element->rec_result->tmp_table_param;
ha_rows examined_rows= 0; ha_rows examined_rows= 0;
bool was_executed= executed; bool was_executed= executed;
TABLE *rec_table; TABLE_LIST *rec_tbl;
DBUG_ENTER("st_select_lex_unit::exec_recursive"); DBUG_ENTER("st_select_lex_unit::exec_recursive");
@ -1865,8 +1880,9 @@ bool st_select_lex_unit::exec_recursive()
else else
with_element->level++; with_element->level++;
while ((rec_table= li++)) while ((rec_tbl= li++))
{ {
TABLE *rec_table= rec_tbl->table;
saved_error= saved_error=
incr_table->insert_all_rows_into_tmp_table(thd, rec_table, incr_table->insert_all_rows_into_tmp_table(thd, rec_table,
tmp_table_param, tmp_table_param,

View File

@ -1852,7 +1852,11 @@ int mysql_multi_update_prepare(THD *thd)
During prepare phase acquire only S metadata locks instead of SW locks to During prepare phase acquire only S metadata locks instead of SW locks to
keep prepare of multi-UPDATE compatible with concurrent LOCK TABLES WRITE keep prepare of multi-UPDATE compatible with concurrent LOCK TABLES WRITE
and global read lock. and global read lock.
Don't evaluate any subqueries even if constant, because
tables aren't locked yet.
*/ */
lex->context_analysis_only|= CONTEXT_ANALYSIS_ONLY_DERIVED;
if (thd->lex->sql_command == SQLCOM_UPDATE_MULTI) if (thd->lex->sql_command == SQLCOM_UPDATE_MULTI)
{ {
if (open_tables(thd, &table_list, &table_count, if (open_tables(thd, &table_list, &table_count,
@ -1875,6 +1879,9 @@ int mysql_multi_update_prepare(THD *thd)
{ {
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }
lex->context_analysis_only&= ~CONTEXT_ANALYSIS_ONLY_DERIVED;
(void) read_statistics_for_tables_if_needed(thd, table_list); (void) read_statistics_for_tables_if_needed(thd, table_list);
/* @todo: downgrade the metadata locks here. */ /* @todo: downgrade the metadata locks here. */

View File

@ -292,6 +292,8 @@ bool create_view_precheck(THD *thd, TABLE_LIST *tables, TABLE_LIST *view,
{ {
for (tbl= sl->get_table_list(); tbl; tbl= tbl->next_local) for (tbl= sl->get_table_list(); tbl; tbl= tbl->next_local)
{ {
if (!tbl->with && tbl->select_lex)
tbl->with= tbl->select_lex->find_table_def_in_with_clauses(tbl);
/* /*
Ensure that we have some privileges on this table, more strict check Ensure that we have some privileges on this table, more strict check
will be done on column level after preparation, will be done on column level after preparation,

Some files were not shown because too many files have changed in this diff Show More