Merge branch '10.3' into 10.4
This commit is contained in:
commit
478b83032b
@ -5776,6 +5776,10 @@ static bool xtrabackup_prepare_func(char** argv)
|
||||
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.
|
||||
The order in which files are processed, is important
|
||||
(see MDEV-18185, MDEV-18201)
|
||||
|
@ -158,7 +158,9 @@ typedef struct st_mysql_ftparser_boolean_info
|
||||
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
|
||||
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
|
||||
to information to be used internally for its own purposes.
|
||||
|
@ -1587,7 +1587,7 @@ drop table t1;
|
||||
--echo #
|
||||
--echo # Check strnxfrm() with odd length
|
||||
--echo #
|
||||
set max_sort_length=9;
|
||||
set max_sort_length=65;
|
||||
select @@max_sort_length;
|
||||
eval create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine $engine;
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
|
@ -4397,7 +4397,7 @@ with t as (select * from t1 where a <=3)
|
||||
select * from t;
|
||||
show create view v1;
|
||||
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;
|
||||
a
|
||||
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;
|
||||
show create view v1;
|
||||
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;
|
||||
a
|
||||
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);
|
||||
show create view v1;
|
||||
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;
|
||||
a
|
||||
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;
|
||||
show create view v1;
|
||||
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;
|
||||
a
|
||||
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;
|
||||
show create view v1;
|
||||
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;
|
||||
a
|
||||
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;
|
||||
show create view v1;
|
||||
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;
|
||||
a
|
||||
7
|
||||
|
@ -571,7 +571,7 @@ with t as (select a from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a;
|
||||
show create view v1;
|
||||
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;
|
||||
c a
|
||||
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;
|
||||
show create view v2;
|
||||
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;
|
||||
c a count(*)
|
||||
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;
|
||||
show create view v3;
|
||||
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;
|
||||
c
|
||||
4
|
||||
@ -1349,7 +1349,7 @@ r.r_regionkey in
|
||||
select r_regionkey from t where r_name <> "ASIA");
|
||||
show create view v;
|
||||
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;
|
||||
n_nationkey n_name n_regionkey r_regionkey r_name
|
||||
0 ALGERIA 0 0 AFRICA
|
||||
@ -1690,6 +1690,41 @@ ERROR 3D000: No database selected
|
||||
DROP TABLE test.t;
|
||||
connection default;
|
||||
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
|
||||
#
|
||||
# MDEV-21673: several references to CTE that uses
|
||||
|
@ -1201,6 +1201,35 @@ DROP TABLE test.t;
|
||||
--connection default
|
||||
--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 #
|
||||
|
48
mysql-test/main/cte_nonrecursive_not_embedded.result
Normal file
48
mysql-test/main/cte_nonrecursive_not_embedded.result
Normal 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
|
58
mysql-test/main/cte_nonrecursive_not_embedded.test
Normal file
58
mysql-test/main/cte_nonrecursive_not_embedded.test
Normal 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
|
@ -818,7 +818,7 @@ where p.id = a.father or p.id = a.mother
|
||||
select * from ancestors;
|
||||
show create view v1;
|
||||
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;
|
||||
id name dob father mother
|
||||
100 Me 2000-01-01 20 30
|
||||
@ -849,7 +849,7 @@ where p.id = ma.mother
|
||||
select * from ancestors;
|
||||
show create view v2;
|
||||
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;
|
||||
id name dob father mother
|
||||
100 Me 2000-01-01 20 30
|
||||
@ -4237,6 +4237,269 @@ a b c
|
||||
deallocate prepare stmt;
|
||||
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
|
||||
#
|
||||
#
|
||||
|
@ -2725,6 +2725,135 @@ deallocate prepare stmt;
|
||||
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -1492,6 +1492,8 @@ ab
|
||||
AE
|
||||
AE
|
||||
SET max_sort_length=8;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '8'
|
||||
SELECT * FROM t1 ORDER BY s1;
|
||||
s1
|
||||
ab
|
||||
|
@ -1765,6 +1765,8 @@ ab
|
||||
AE
|
||||
AE
|
||||
SET max_sort_length=8;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '8'
|
||||
SELECT * FROM t1 ORDER BY s1;
|
||||
s1
|
||||
ab
|
||||
|
@ -1505,6 +1505,8 @@ ab
|
||||
AE
|
||||
AE
|
||||
SET max_sort_length=8;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '8'
|
||||
SELECT * FROM t1 ORDER BY s1;
|
||||
s1
|
||||
ab
|
||||
|
@ -6757,9 +6757,11 @@ DFFFDFFF9CFF9DFF9EFF
|
||||
# Checking strnxfrm() with odd length
|
||||
#
|
||||
set max_sort_length=9;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '9'
|
||||
select @@max_sort_length;
|
||||
@@max_sort_length
|
||||
9
|
||||
64
|
||||
create table t1 (a varchar(128) character set utf8 collate utf8_general_ci);
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
select * from t1 order by a;
|
||||
|
@ -2371,10 +2371,10 @@ drop table t1;
|
||||
#
|
||||
# Check strnxfrm() with odd length
|
||||
#
|
||||
set max_sort_length=9;
|
||||
set max_sort_length=65;
|
||||
select @@max_sort_length;
|
||||
@@max_sort_length
|
||||
9
|
||||
65
|
||||
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci);
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
select * from t1 order by a;
|
||||
|
@ -1520,7 +1520,7 @@ drop table t1;
|
||||
--echo #
|
||||
--echo # Check strnxfrm() with odd length
|
||||
--echo #
|
||||
set max_sort_length=9;
|
||||
set max_sort_length=65;
|
||||
select @@max_sort_length;
|
||||
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci);
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
|
@ -2203,10 +2203,10 @@ drop table t1;
|
||||
#
|
||||
# Check strnxfrm() with odd length
|
||||
#
|
||||
set max_sort_length=9;
|
||||
set max_sort_length=65;
|
||||
select @@max_sort_length;
|
||||
@@max_sort_length
|
||||
9
|
||||
65
|
||||
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine heap;
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
select * from t1 order by a;
|
||||
|
@ -2329,10 +2329,10 @@ drop table t1;
|
||||
#
|
||||
# Check strnxfrm() with odd length
|
||||
#
|
||||
set max_sort_length=9;
|
||||
set max_sort_length=65;
|
||||
select @@max_sort_length;
|
||||
@@max_sort_length
|
||||
9
|
||||
65
|
||||
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine InnoDB;
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
select * from t1 order by a;
|
||||
|
@ -2336,10 +2336,10 @@ drop table t1;
|
||||
#
|
||||
# Check strnxfrm() with odd length
|
||||
#
|
||||
set max_sort_length=9;
|
||||
set max_sort_length=65;
|
||||
select @@max_sort_length;
|
||||
@@max_sort_length
|
||||
9
|
||||
65
|
||||
create table t1 (a varchar(128) character set utf8mb4 collate utf8mb4_general_ci) engine MyISAM;
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
select * from t1 order by a;
|
||||
|
@ -1280,6 +1280,18 @@ Name_exp_1
|
||||
DROP VIEW v1;
|
||||
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
|
||||
#
|
||||
#
|
||||
|
@ -939,6 +939,16 @@ DROP VIEW v1;
|
||||
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -289,6 +289,24 @@ a b c d
|
||||
3 f_ 1 0 1
|
||||
3 f\_ 0 1 0
|
||||
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 ^ )
|
||||
#
|
||||
|
@ -187,7 +187,7 @@ DROP TABLE t1;
|
||||
--echo #
|
||||
|
||||
#
|
||||
# Item_func_line::print()
|
||||
# Item_func_like::print()
|
||||
#
|
||||
create view v1 as select 'foo!' like 'foo!!', 'foo!' like 'foo!!' escape '!';
|
||||
show create view v1;
|
||||
@ -208,6 +208,33 @@ set sql_mode=default;
|
||||
select * from 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 # MDEV-17359 - Extend expression supported by like (| & << >> || + - * / DIV MOD ^ )
|
||||
--echo #
|
||||
|
@ -863,6 +863,7 @@ where data_type = 'longtext' and table_schema != 'performance_schema'
|
||||
order by binary table_name, ordinal_position;
|
||||
table_schema table_name column_name
|
||||
information_schema ALL_PLUGINS PLUGIN_DESCRIPTION
|
||||
information_schema CHECK_CONSTRAINTS CHECK_CLAUSE
|
||||
information_schema COLUMNS COLUMN_DEFAULT
|
||||
information_schema COLUMNS COLUMN_TYPE
|
||||
information_schema COLUMNS GENERATION_EXPRESSION
|
||||
@ -2222,17 +2223,10 @@ SCHEMA_NAME
|
||||
# MDEV-14836: Assertion `m_status == DA_ERROR' failed in
|
||||
# Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED
|
||||
#
|
||||
SELECT * FROM seq_1_to_100 LIMIT ROWS EXAMINED 10;
|
||||
seq
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` LIMIT ROWS EXAMINED 10;
|
||||
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
|
||||
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
|
||||
#
|
||||
|
@ -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 #
|
||||
|
||||
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 # End of 10.2 Test
|
||||
|
@ -229,3 +229,37 @@ drop user definer@localhost;
|
||||
drop database mysqltest1;
|
||||
drop database mysqltest2;
|
||||
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;
|
||||
|
@ -75,3 +75,20 @@ drop user definer@localhost;
|
||||
drop database mysqltest1;
|
||||
drop database mysqltest2;
|
||||
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;
|
||||
|
@ -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 PROCEDURE test.pr;
|
||||
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 (
|
||||
id int(10) unsigned not null,
|
||||
created_date date not null,
|
||||
|
@ -172,8 +172,6 @@ DROP PROCEDURE test.pr;
|
||||
# MDEV-13274 mysql_upgrade fails if dbname+tablename+partioname > 64 chars
|
||||
#
|
||||
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 (
|
||||
id int(10) unsigned not null,
|
||||
|
@ -845,18 +845,20 @@ col2 col col
|
||||
2 2 2
|
||||
1 3 3
|
||||
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 = concat(repeat('x', 19), 'z');
|
||||
insert into t1 set a = concat(repeat('x', 19), 'ab');
|
||||
insert into t1 set a = concat(repeat('x', 19), 'aa');
|
||||
insert into t1 set a = concat(repeat('x', 63), 'z');
|
||||
insert into t1 set a = concat(repeat('x', 63), 'ab');
|
||||
insert into t1 set a = concat(repeat('x', 63), 'aa');
|
||||
set max_sort_length=20;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '20'
|
||||
select a from t1 order by a;
|
||||
a
|
||||
xxxxxxxxxxxxxxxxxxxab
|
||||
xxxxxxxxxxxxxxxxxxxaa
|
||||
xxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxz
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxab
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaa
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
`sid` decimal(8,0) default null,
|
||||
@ -3317,6 +3319,8 @@ drop table t1;
|
||||
SET @save_sort_buffer_size= @@sort_buffer_size;
|
||||
SET @save_max_sort_length= @@max_sort_length;
|
||||
SET max_sort_length=8;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '8'
|
||||
SET sort_buffer_size=1024;
|
||||
CREATE TABLE t1(a INT, b DECIMAL(65), c BLOB);
|
||||
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_max_length_for_sort_data= @@max_length_for_sort_data;
|
||||
SET max_sort_length=8;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '8'
|
||||
SET sort_buffer_size=1024;
|
||||
SET max_length_for_sort_data=7000;
|
||||
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 sql_select_limit = 3;
|
||||
SET max_sort_length=8;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_sort_length value: '8'
|
||||
SELECT * FROM t1 ORDER BY a+1;
|
||||
a b
|
||||
1 1
|
||||
|
@ -532,11 +532,11 @@ drop table t1, t2;
|
||||
# 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 = concat(repeat('x', 19), 'z');
|
||||
insert into t1 set a = concat(repeat('x', 19), 'ab');
|
||||
insert into t1 set a = concat(repeat('x', 19), 'aa');
|
||||
insert into t1 set a = concat(repeat('x', 63), 'z');
|
||||
insert into t1 set a = concat(repeat('x', 63), 'ab');
|
||||
insert into t1 set a = concat(repeat('x', 63), 'aa');
|
||||
set max_sort_length=20;
|
||||
select a from t1 order by a;
|
||||
drop table t1;
|
||||
|
@ -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';
|
||||
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`
|
||||
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;
|
||||
|
@ -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;
|
||||
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;
|
||||
|
@ -818,33 +818,33 @@ select @@character_set_results;
|
||||
NULL
|
||||
set character_set_results=default;
|
||||
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 = concat(repeat('x',24),'x');
|
||||
insert into t1 set c = concat(repeat('x',24),'w');
|
||||
insert into t1 set c = concat(repeat('x',24),'y');
|
||||
insert into t1 set c = concat(repeat('x',64),'x');
|
||||
insert into t1 set c = concat(repeat('x',64),'w');
|
||||
insert into t1 set c = concat(repeat('x',64),'y');
|
||||
set max_sort_length=200;
|
||||
select c from t1 order by c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy
|
||||
reset query cache;
|
||||
set max_sort_length=20;
|
||||
set max_sort_length=64;
|
||||
select c from t1 order by c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy
|
||||
set max_sort_length=200;
|
||||
select c from t1 order by c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy
|
||||
set max_sort_length=default;
|
||||
select '1' || '3' from t1;
|
||||
'1' || '3'
|
||||
|
@ -606,15 +606,15 @@ set character_set_results=default;
|
||||
#
|
||||
# max_sort_length
|
||||
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 = concat(repeat('x',24),'x');
|
||||
insert into t1 set c = concat(repeat('x',24),'w');
|
||||
insert into t1 set c = concat(repeat('x',24),'y');
|
||||
insert into t1 set c = concat(repeat('x',64),'x');
|
||||
insert into t1 set c = concat(repeat('x',64),'w');
|
||||
insert into t1 set c = concat(repeat('x',64),'y');
|
||||
set max_sort_length=200;
|
||||
select c from t1 order by c, id;
|
||||
reset query cache;
|
||||
set max_sort_length=20;
|
||||
set max_sort_length=64;
|
||||
select c from t1 order by c, id;
|
||||
set max_sort_length=200;
|
||||
select c from t1 order by c, id;
|
||||
|
@ -3218,6 +3218,31 @@ pk a b
|
||||
1 5 50
|
||||
65 5 50
|
||||
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
|
||||
#
|
||||
|
@ -2180,6 +2180,40 @@ eval $q4;
|
||||
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -3215,6 +3215,31 @@ pk a b
|
||||
70 4 40
|
||||
71 2 20
|
||||
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
|
||||
#
|
||||
|
@ -1,4 +1,3 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (y year,y2 year(2));
|
||||
Warnings:
|
||||
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
|
||||
2069 69
|
||||
drop table t1;
|
||||
#
|
||||
# Bug 2335
|
||||
#
|
||||
create table t1 (y year);
|
||||
insert ignore into t1 values (now());
|
||||
Warnings:
|
||||
@ -36,6 +38,9 @@ select if(y = now(), 1, 0) from t1;
|
||||
if(y = now(), 1, 0)
|
||||
1
|
||||
drop table t1;
|
||||
#
|
||||
# Bug #27176: Assigning a string to an year column has unexpected results
|
||||
#
|
||||
create table t1(a year);
|
||||
insert into t1 values (2000.5), ('2000.5'), ('2001a'), ('2.001E3');
|
||||
Warnings:
|
||||
@ -47,7 +52,9 @@ a
|
||||
2001
|
||||
2001
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# End of 5.0 tests
|
||||
#
|
||||
#
|
||||
# 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
|
||||
DROP TABLE t1;
|
||||
#
|
||||
End of 5.1 tests
|
||||
# End of 5.1 tests
|
||||
#
|
||||
create function y2k() returns int deterministic return 2000;
|
||||
create table t1 (a year(2), b int);
|
||||
Warnings:
|
||||
@ -456,9 +464,6 @@ DROP TABLE t1;
|
||||
# End of 10.1 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.2 tests
|
||||
#
|
||||
#
|
||||
# MDEV-9392 Copying from DECIMAL to YEAR is not consistent about warnings
|
||||
#
|
||||
CREATE TABLE t1 (a YEAR);
|
||||
@ -500,6 +505,64 @@ Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
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
|
||||
#
|
||||
#
|
||||
|
@ -1,9 +1,6 @@
|
||||
#
|
||||
# Test year
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (y year,y2 year(2));
|
||||
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;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug 2335
|
||||
#
|
||||
--echo #
|
||||
--echo # Bug 2335
|
||||
--echo #
|
||||
|
||||
create table t1 (y year);
|
||||
insert ignore into t1 values (now());
|
||||
select if(y = now(), 1, 0) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #27176: Assigning a string to an year column has unexpected results
|
||||
#
|
||||
--echo #
|
||||
--echo # Bug #27176: Assigning a string to an year column has unexpected results
|
||||
--echo #
|
||||
|
||||
create table t1(a year);
|
||||
insert into t1 values (2000.5), ('2000.5'), ('2001a'), ('2.001E3');
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
--echo #
|
||||
--echo # End of 5.0 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--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);
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.1 tests
|
||||
--echo #
|
||||
|
||||
--echo End of 5.1 tests
|
||||
#
|
||||
# fun with convert_const_to_int
|
||||
# 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 #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.2 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-9392 Copying from DECIMAL to YEAR is not consistent about warnings
|
||||
--echo #
|
||||
@ -268,6 +265,17 @@ SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR
|
||||
ALTER TABLE t1 MODIFY a YEAR;
|
||||
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 # End of 10.2 tests
|
||||
|
@ -6723,6 +6723,41 @@ DROP PROCEDURE sp;
|
||||
DROP VIEW v1;
|
||||
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
|
||||
#
|
||||
#
|
||||
|
@ -6432,6 +6432,36 @@ DROP PROCEDURE sp;
|
||||
DROP VIEW v1;
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -3222,6 +3222,7 @@ sub mysql_install_db {
|
||||
mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/");
|
||||
mtr_add_arg($args, "--core-file");
|
||||
mtr_add_arg($args, "--console");
|
||||
mtr_add_arg($args, "--character-set-server=latin1");
|
||||
|
||||
if ( $opt_debug )
|
||||
{
|
||||
|
@ -9,5 +9,3 @@
|
||||
# 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
|
||||
|
@ -1,5 +1,5 @@
|
||||
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
|
||||
# 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 INDEX i ON t_row(a);
|
||||
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;
|
||||
|
||||
|
||||
@ -36,12 +36,11 @@ DROP TABLE t_row;
|
||||
SET binlog_format = ROW;
|
||||
CREATE TABLE t_stmt (a VARCHAR(100)) ENGINE = EXAMPLE;
|
||||
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 INDEX i ON t_stmt(a);
|
||||
ERROR 42000: Too many key parts specified; max 0 parts allowed
|
||||
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;
|
||||
|
||||
|
||||
|
@ -7,9 +7,11 @@ INSERT INTO t2 VALUES (1),(2),(3);
|
||||
**** Truncate of empty table shall be logged
|
||||
TRUNCATE TABLE t1;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -18,18 +20,17 @@ DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -37,16 +38,20 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # 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 # 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 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
# Even though the isolation level might be permissive, truncate
|
||||
# table follows a stricter isolation as its locking is based on
|
||||
@ -59,9 +64,11 @@ SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -71,18 +78,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -90,16 +96,20 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # 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 # 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 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
@ -109,9 +119,11 @@ SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -121,18 +133,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -140,16 +151,20 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # 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 # 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 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
@ -159,9 +174,11 @@ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -171,18 +188,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -190,16 +206,20 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # 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 # 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 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
@ -209,9 +229,11 @@ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -221,18 +243,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -240,16 +261,20 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # 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 # 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 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
RESET MASTER;
|
||||
@ -261,9 +286,11 @@ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -273,18 +300,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -292,14 +318,16 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
# Truncate is not supported for SBR if the isolation level is
|
||||
# READ UNCOMMITTED or READ COMMITTED. These specific isolation
|
||||
@ -312,9 +340,11 @@ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -324,18 +354,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -343,14 +372,16 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
@ -360,9 +391,11 @@ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
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
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
@ -372,18 +405,17 @@ CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
connect truncate,localhost,root,,;
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
connection default;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
connection truncate;
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -391,13 +423,16 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
show binlog events from <binlog_start>;
|
||||
connection default;
|
||||
include/show_binlog_events.inc
|
||||
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 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
disconnect truncate;
|
||||
DROP TABLE t1,t2;
|
||||
SET BINLOG_FORMAT=@old_binlog_format;
|
||||
SET @@global.binlog_format = @old_binlog_format;
|
||||
SET @@session.binlog_format = @old_binlog_format;
|
||||
|
@ -1 +0,0 @@
|
||||
--innodb
|
@ -71,7 +71,6 @@ DROP TABLE t_row;
|
||||
SET binlog_format = ROW;
|
||||
CREATE TABLE t_stmt (a VARCHAR(100)) ENGINE = EXAMPLE;
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
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);
|
||||
|
@ -1 +0,0 @@
|
||||
--loose-innodb
|
@ -41,4 +41,5 @@ source include/binlog_truncate.test;
|
||||
let $before_truncate = SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
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;
|
@ -164,20 +164,15 @@ connection slave;
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
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 ]
|
||||
insert into t1 values (500);
|
||||
[ master status should be OFF ]
|
||||
@ -235,9 +230,6 @@ max(a)
|
||||
500
|
||||
connection master;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
@ -304,8 +296,6 @@ connection master;
|
||||
create table t1 (a int) engine = ENGINE_TYPE;
|
||||
drop table t1;
|
||||
connection slave;
|
||||
show status like 'Rpl_relay%';
|
||||
Variable_name Value
|
||||
[ test reset master ]
|
||||
connection master;
|
||||
reset master;
|
||||
@ -321,7 +311,7 @@ Rpl_semi_sync_master_yes_tx 0
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
connection slave;
|
||||
include/start_slave.inc
|
||||
connection master;
|
||||
@ -353,6 +343,7 @@ include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
reset master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set sql_log_bin=0;
|
||||
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
|
||||
flush privileges;
|
||||
@ -403,10 +394,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
|
@ -2284,6 +2284,32 @@ connection master;
|
||||
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'
|
||||
#
|
||||
# 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
|
||||
#
|
||||
connection master;
|
||||
|
@ -2010,6 +2010,35 @@ connection master;
|
||||
--error ER_CANT_CREATE_FEDERATED_TABLE
|
||||
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 # MDEV-21049 Segfault in create federatedx table with empty hostname
|
||||
--echo #
|
||||
|
@ -90,7 +90,9 @@ CREATE TABLE t3
|
||||
(
|
||||
a int,
|
||||
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;
|
||||
SELECT * from information_schema.check_constraints;
|
||||
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 t3 b `b` > 0
|
||||
def foo t3 b `b` > 10
|
||||
def foo t3 b1 `b` < 123456789012345678901234567890123456789012345678901234567890123456789
|
||||
disconnect con1;
|
||||
CONNECT con2, localhost, boo2,, test;
|
||||
SELECT * from information_schema.check_constraints;
|
||||
|
@ -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 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 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_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
|
||||
@ -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 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 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)
|
||||
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)
|
||||
|
@ -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 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 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_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
|
||||
@ -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 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 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)
|
||||
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)
|
||||
|
@ -91,9 +91,9 @@ TABLE_CATALOG def
|
||||
TABLE_SCHEMA information_schema
|
||||
TABLE_NAME CHECK_CONSTRAINTS
|
||||
TABLE_TYPE SYSTEM VIEW
|
||||
ENGINE MEMORY
|
||||
ENGINE MYISAM_OR_MARIA
|
||||
VERSION 11
|
||||
ROW_FORMAT Fixed
|
||||
ROW_FORMAT DYNAMIC_OR_PAGE
|
||||
TABLE_ROWS #TBLR#
|
||||
AVG_ROW_LENGTH #ARL#
|
||||
DATA_LENGTH #DL#
|
||||
@ -1157,9 +1157,9 @@ TABLE_CATALOG def
|
||||
TABLE_SCHEMA information_schema
|
||||
TABLE_NAME CHECK_CONSTRAINTS
|
||||
TABLE_TYPE SYSTEM VIEW
|
||||
ENGINE MEMORY
|
||||
ENGINE MYISAM_OR_MARIA
|
||||
VERSION 11
|
||||
ROW_FORMAT Fixed
|
||||
ROW_FORMAT DYNAMIC_OR_PAGE
|
||||
TABLE_ROWS #TBLR#
|
||||
AVG_ROW_LENGTH #ARL#
|
||||
DATA_LENGTH #DL#
|
||||
|
@ -91,9 +91,9 @@ TABLE_CATALOG def
|
||||
TABLE_SCHEMA information_schema
|
||||
TABLE_NAME CHECK_CONSTRAINTS
|
||||
TABLE_TYPE SYSTEM VIEW
|
||||
ENGINE MEMORY
|
||||
ENGINE MYISAM_OR_MARIA
|
||||
VERSION 11
|
||||
ROW_FORMAT Fixed
|
||||
ROW_FORMAT DYNAMIC_OR_PAGE
|
||||
TABLE_ROWS #TBLR#
|
||||
AVG_ROW_LENGTH #ARL#
|
||||
DATA_LENGTH #DL#
|
||||
@ -1157,9 +1157,9 @@ TABLE_CATALOG def
|
||||
TABLE_SCHEMA information_schema
|
||||
TABLE_NAME CHECK_CONSTRAINTS
|
||||
TABLE_TYPE SYSTEM VIEW
|
||||
ENGINE MEMORY
|
||||
ENGINE MYISAM_OR_MARIA
|
||||
VERSION 11
|
||||
ROW_FORMAT Fixed
|
||||
ROW_FORMAT DYNAMIC_OR_PAGE
|
||||
TABLE_ROWS #TBLR#
|
||||
AVG_ROW_LENGTH #ARL#
|
||||
DATA_LENGTH #DL#
|
||||
|
@ -69,7 +69,9 @@ CREATE TABLE t3
|
||||
(
|
||||
a int,
|
||||
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;
|
||||
--sorted_result
|
||||
SELECT * from information_schema.check_constraints;
|
||||
|
@ -1,3 +1,5 @@
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
|
@ -8,9 +8,10 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/galera_have_debug_sync.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--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.
|
||||
--connection node_2
|
||||
@ -41,4 +42,4 @@ SET SESSION wsrep_on=0;
|
||||
--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.");
|
||||
|
||||
--source suite/galera/include/auto_increment_offset_restore.inc
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
@ -790,3 +790,31 @@ t1 CREATE TABLE `t1` (
|
||||
ALTER TABLE t1 DROP INDEX f1;
|
||||
ALTER TABLE t1 DROP f3;
|
||||
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;
|
||||
|
@ -649,3 +649,40 @@ SHOW CREATE TABLE t1;
|
||||
ALTER TABLE t1 DROP INDEX f1;
|
||||
ALTER TABLE t1 DROP f3;
|
||||
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;
|
||||
|
@ -81,4 +81,5 @@ CREATE TABLE t1(f1 INT) ENGINE=INNODB;
|
||||
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;
|
||||
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;
|
||||
|
@ -35,4 +35,5 @@ CREATE TABLE t1(f1 INT) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES(1);
|
||||
--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) = (1,1) FROM t1 WHERE (SELECT 1 FROM t1)) x, t1 AS d SET d.f1 = 1;
|
||||
DROP TABLE t1;
|
||||
|
@ -9,7 +9,6 @@ source include/have_innodb.inc;
|
||||
source include/master-slave.inc;
|
||||
|
||||
let $engine_type= InnoDB;
|
||||
#let $engine_type= MyISAM;
|
||||
|
||||
# Suppress warnings that might be generated during the test
|
||||
connection master;
|
||||
@ -94,7 +93,6 @@ enable_query_log;
|
||||
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_status';
|
||||
--replace_result 305 304
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
|
||||
# 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;
|
||||
|
||||
connection master;
|
||||
--source include/kill_binlog_dump_threads.inc
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
|
||||
# The first semi-sync check should be on because after slave stop,
|
||||
# there are no transactions on the master.
|
||||
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';
|
||||
--replace_result 305 304
|
||||
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 ];
|
||||
insert into t1 values (500);
|
||||
@ -225,7 +230,6 @@ source include/wait_for_status_var.inc;
|
||||
echo [ master status should be OFF ];
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
--replace_result 305 304
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
|
||||
# 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 ];
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
--replace_result 305 304
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
|
||||
--echo #
|
||||
@ -274,9 +277,11 @@ connection master;
|
||||
|
||||
# The master semi-sync 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';
|
||||
--replace_result 305 304
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
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;
|
||||
drop table t1;
|
||||
|
||||
##show status like 'Rpl_semi_sync_master_status';
|
||||
|
||||
sync_slave_with_master;
|
||||
--replace_column 2 #
|
||||
show status like 'Rpl_relay%';
|
||||
|
||||
echo [ test reset master ];
|
||||
connection master;
|
||||
@ -353,19 +354,7 @@ source include/stop_slave.inc;
|
||||
reset slave;
|
||||
|
||||
# Kill the dump thread on master for previous slave connection and
|
||||
# wait for it to exit
|
||||
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;
|
||||
}
|
||||
--source include/kill_binlog_dump_threads.inc
|
||||
|
||||
connection slave;
|
||||
source include/start_slave.inc;
|
||||
@ -404,17 +393,7 @@ connection master;
|
||||
reset master;
|
||||
|
||||
# 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`;
|
||||
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;
|
||||
}
|
||||
--source include/kill_binlog_dump_threads.inc
|
||||
|
||||
# Do not binlog the following statement because it will generate
|
||||
# different events for ROW and STATEMENT format
|
||||
@ -459,21 +438,16 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
connection master;
|
||||
|
||||
# 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`;
|
||||
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;
|
||||
}
|
||||
--source include/kill_binlog_dump_threads.inc
|
||||
|
||||
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';
|
||||
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;
|
||||
|
||||
connection slave;
|
||||
|
@ -164,20 +164,15 @@ connection slave;
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
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 ]
|
||||
insert into t1 values (500);
|
||||
[ master status should be OFF ]
|
||||
@ -235,9 +230,6 @@ max(a)
|
||||
500
|
||||
connection master;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
@ -304,8 +296,6 @@ connection master;
|
||||
create table t1 (a int) engine = ENGINE_TYPE;
|
||||
drop table t1;
|
||||
connection slave;
|
||||
show status like 'Rpl_relay%';
|
||||
Variable_name Value
|
||||
[ test reset master ]
|
||||
connection master;
|
||||
reset master;
|
||||
@ -321,7 +311,7 @@ Rpl_semi_sync_master_yes_tx 0
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
connection slave;
|
||||
include/start_slave.inc
|
||||
connection master;
|
||||
@ -353,6 +343,7 @@ include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
reset master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set sql_log_bin=0;
|
||||
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
|
||||
flush privileges;
|
||||
@ -403,10 +394,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
|
@ -165,20 +165,15 @@ connection slave;
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
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 ]
|
||||
insert into t1 values (500);
|
||||
[ master status should be OFF ]
|
||||
@ -236,9 +231,6 @@ max(a)
|
||||
500
|
||||
connection master;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
@ -305,8 +297,6 @@ connection master;
|
||||
create table t1 (a int) engine = ENGINE_TYPE;
|
||||
drop table t1;
|
||||
connection slave;
|
||||
show status like 'Rpl_relay%';
|
||||
Variable_name Value
|
||||
[ test reset master ]
|
||||
connection master;
|
||||
reset master;
|
||||
@ -322,7 +312,7 @@ Rpl_semi_sync_master_yes_tx 0
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
connection slave;
|
||||
include/start_slave.inc
|
||||
connection master;
|
||||
@ -354,6 +344,7 @@ include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
reset master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set sql_log_bin=0;
|
||||
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
|
||||
flush privileges;
|
||||
@ -404,10 +395,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
|
@ -165,20 +165,15 @@ connection slave;
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
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 ]
|
||||
insert into t1 values (500);
|
||||
[ master status should be OFF ]
|
||||
@ -236,9 +231,6 @@ max(a)
|
||||
500
|
||||
connection master;
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
@ -305,8 +297,6 @@ connection master;
|
||||
create table t1 (a int) engine = ENGINE_TYPE;
|
||||
drop table t1;
|
||||
connection slave;
|
||||
show status like 'Rpl_relay%';
|
||||
Variable_name Value
|
||||
[ test reset master ]
|
||||
connection master;
|
||||
reset master;
|
||||
@ -322,7 +312,7 @@ Rpl_semi_sync_master_yes_tx 0
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
connection slave;
|
||||
include/start_slave.inc
|
||||
connection master;
|
||||
@ -354,6 +344,7 @@ include/stop_slave.inc
|
||||
reset slave;
|
||||
connection master;
|
||||
reset master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
set sql_log_bin=0;
|
||||
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
|
||||
flush privileges;
|
||||
@ -404,10 +395,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
connection master;
|
||||
include/kill_binlog_dump_threads.inc
|
||||
[ 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';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
|
@ -436,6 +436,9 @@ SET @@DEBUG_SYNC='now SIGNAL proceed_by_1000';
|
||||
--connection spoiler_21
|
||||
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
|
||||
--connection spoiler_22
|
||||
ROLLBACK;
|
||||
|
@ -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
|
@ -1,301 +1,279 @@
|
||||
SET @start_value= @@global.max_sort_length;
|
||||
SET @session_max_sort_length = @@Session.max_sort_length;
|
||||
DROP TABLE IF EXISTS t;
|
||||
** creating tables **
|
||||
CREATE TABLE t
|
||||
(
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
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)
|
||||
);
|
||||
CREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
|
||||
CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY, c BLOB);
|
||||
CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
|
||||
'#--------------------FN_DYNVARS_098_01-------------------------#'
|
||||
connect test_con1,localhost,root,,;
|
||||
connection test_con1;
|
||||
SELECT @@global.max_sort_length = 10;
|
||||
@@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;
|
||||
** Setting value to 70 and inserting data **
|
||||
SET @@global.max_sort_length = 70;
|
||||
SELECT @@global.max_sort_length;
|
||||
@@global.max_sort_length
|
||||
30
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
70
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
** Results should be sorted **
|
||||
SET @@session.max_sort_length = 29;
|
||||
SET @@session.max_sort_length = 69;
|
||||
SELECT @@session.max_sort_length;
|
||||
@@session.max_sort_length
|
||||
29
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
69
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
** Results should be sorted **
|
||||
'#--------------------FN_DYNVARS_098_02-------------------------#'
|
||||
connect test_con2,localhost,root,,;
|
||||
connection test_con2;
|
||||
SET @@global.max_sort_length = 30;
|
||||
SET @@global.max_sort_length = 70;
|
||||
SELECT @@global.max_sort_length;
|
||||
@@global.max_sort_length
|
||||
30
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
70
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
** Results should be sorted **
|
||||
SET @@session.max_sort_length = 20;
|
||||
SET @@session.max_sort_length = 64;
|
||||
SELECT @@session.max_sort_length;
|
||||
@@session.max_sort_length
|
||||
20
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
64
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
** Results should not be sorted **
|
||||
'#--------------------FN_DYNVARS_098_03-------------------------#'
|
||||
SET max_sort_length=20;
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
SET max_sort_length=64;
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
** Results should not be sorted **
|
||||
RESET QUERY CACHE;
|
||||
'#--------------------FN_DYNVARS_098_04-------------------------#'
|
||||
SET max_sort_length=29;
|
||||
SET max_sort_length=69;
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
** Results should be sorted **
|
||||
'#--------------------FN_DYNVARS_098_05-------------------------#'
|
||||
SET max_sort_length=30;
|
||||
SET max_sort_length=70;
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
** Results should be sorted **
|
||||
'#--------------------FN_DYNVARS_098_06-------------------------#'
|
||||
SET max_sort_length=default;
|
||||
SELECT @@max_sort_length;
|
||||
@@max_sort_length
|
||||
70
|
||||
SELECT c from t ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
** Results should be sorted **
|
||||
'#--------------------FN_DYNVARS_098_07-------------------------#'
|
||||
Testing type BLOB
|
||||
SET @@global.max_sort_length = 30;
|
||||
SELECT @@global.max_sort_length;
|
||||
@@global.max_sort_length
|
||||
30
|
||||
INSERT INTO t1 set c = repeat('x',29);
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'g','w');
|
||||
SELECT c from t1 ORDER BY c, id;
|
||||
SET @@max_sort_length = 70;
|
||||
SELECT @@max_sort_length;
|
||||
@@max_sort_length
|
||||
70
|
||||
INSERT INTO t1 set c = repeat('x',69);
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t1 ORDER BY c, id DESC;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
** Results should be sorted **
|
||||
SET @@session.max_sort_length = 20;
|
||||
SET @@session.max_sort_length = 64;
|
||||
SELECT @@session.max_sort_length;
|
||||
@@session.max_sort_length
|
||||
20
|
||||
INSERT INTO t1 set c = repeat('x',29);
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'g','w');
|
||||
64
|
||||
INSERT INTO t1 set c = repeat('x',69);
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t1 ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
** Results should not be sorted **
|
||||
'#--------------------FN_DYNVARS_098_08-------------------------#'
|
||||
Testing type CHAR
|
||||
SET @@global.max_sort_length = 30;
|
||||
SET @@global.max_sort_length = 70;
|
||||
SELECT @@global.max_sort_length;
|
||||
@@global.max_sort_length
|
||||
30
|
||||
INSERT INTO t2 set c = repeat('x',29);
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'g','w');
|
||||
70
|
||||
INSERT INTO t2 set c = repeat('x',69);
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t2 ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
** Results should not be sorted **
|
||||
SET @@session.max_sort_length = 20;
|
||||
SET @@session.max_sort_length = 64;
|
||||
SELECT @@session.max_sort_length;
|
||||
@@session.max_sort_length
|
||||
20
|
||||
INSERT INTO t2 set c = repeat('x',29);
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'g','w');
|
||||
64
|
||||
INSERT INTO t2 set c = repeat('x',69);
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t2 ORDER BY c, id;
|
||||
c
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsy
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxgw
|
||||
** Results should not be sorted **
|
||||
connection default;
|
||||
disconnect test_con1;
|
||||
disconnect test_con2;
|
||||
SET @@SESSION.max_sort_length = @session_max_sort_length;
|
||||
DROP TABLE IF EXISTS t;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE t, t1, t2;
|
||||
SET @@global.max_sort_length= @start_value;
|
||||
|
@ -1044,10 +1044,10 @@ READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME GROUP_CONCAT_MAX_LEN
|
||||
VARIABLE_SCOPE SESSION
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_TYPE INT UNSIGNED
|
||||
VARIABLE_COMMENT The maximum length of the result of function GROUP_CONCAT()
|
||||
NUMERIC_MIN_VALUE 4
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_MAX_VALUE 4294967295
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@ -1946,7 +1946,7 @@ VARIABLE_NAME MAX_SORT_LENGTH
|
||||
VARIABLE_SCOPE SESSION
|
||||
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)
|
||||
NUMERIC_MIN_VALUE 8
|
||||
NUMERIC_MIN_VALUE 64
|
||||
NUMERIC_MAX_VALUE 8388608
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
|
@ -1064,10 +1064,10 @@ READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME GROUP_CONCAT_MAX_LEN
|
||||
VARIABLE_SCOPE SESSION
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_TYPE INT UNSIGNED
|
||||
VARIABLE_COMMENT The maximum length of the result of function GROUP_CONCAT()
|
||||
NUMERIC_MIN_VALUE 4
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_MAX_VALUE 4294967295
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@ -2106,7 +2106,7 @@ VARIABLE_NAME MAX_SORT_LENGTH
|
||||
VARIABLE_SCOPE SESSION
|
||||
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)
|
||||
NUMERIC_MIN_VALUE 8
|
||||
NUMERIC_MIN_VALUE 64
|
||||
NUMERIC_MAX_VALUE 8388608
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
|
@ -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 #
|
||||
####################################################
|
||||
|
@ -26,70 +26,40 @@
|
||||
|
||||
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 #
|
||||
#########################
|
||||
|
||||
|
||||
--echo ** creating tables **
|
||||
CREATE TABLE t
|
||||
(
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
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)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
|
||||
CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY, c BLOB);
|
||||
CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY, c TEXT);
|
||||
|
||||
--echo '#--------------------FN_DYNVARS_098_01-------------------------#'
|
||||
##########################################################
|
||||
# Test behavior of variable on new connection # 01 #
|
||||
##########################################################
|
||||
|
||||
|
||||
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
|
||||
--echo ** Setting value to 30 and inserting data **
|
||||
SET @@global.max_sort_length = 30;
|
||||
--echo ** Setting value to 70 and inserting data **
|
||||
SET @@global.max_sort_length = 70;
|
||||
SELECT @@global.max_sort_length;
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
--echo ** Results should be sorted **
|
||||
|
||||
# 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;
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
--echo ** Results should be sorted **
|
||||
|
||||
@ -99,72 +69,69 @@ SELECT c from t ORDER BY c, id;
|
||||
##########################################################
|
||||
|
||||
connect (test_con2,localhost,root,,);
|
||||
connection test_con2;
|
||||
|
||||
|
||||
## 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;
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
|
||||
--echo ** Results should be sorted **
|
||||
|
||||
# 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;
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t ORDER BY c, id;
|
||||
|
||||
--echo ** Results should not be sorted **
|
||||
|
||||
--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 #
|
||||
###########################################
|
||||
|
||||
SET max_sort_length=20;
|
||||
SET max_sort_length=64;
|
||||
|
||||
###################################
|
||||
# Inserting values in table t #
|
||||
###################################
|
||||
|
||||
INSERT INTO t set c = repeat('x',29);
|
||||
INSERT INTO t set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t set c = repeat('x',69);
|
||||
INSERT INTO t set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t set c = concat(repeat('x',68),'g','w');
|
||||
|
||||
SELECT c from t ORDER BY c, id;
|
||||
--echo ** Results should not be sorted **
|
||||
|
||||
RESET QUERY CACHE;
|
||||
|
||||
|
||||
--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;
|
||||
--echo ** Results should be sorted **
|
||||
|
||||
--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;
|
||||
--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#
|
||||
##############################################################
|
||||
|
||||
|
||||
SET max_sort_length=default;
|
||||
SELECT @@max_sort_length;
|
||||
SELECT c from t ORDER BY c, id;
|
||||
--echo ** Results should be sorted **
|
||||
|
||||
|
||||
--echo '#--------------------FN_DYNVARS_098_07-------------------------#'
|
||||
###########################################
|
||||
#Check if sorting is applied on BLOB type #
|
||||
###########################################
|
||||
--echo Testing type BLOB
|
||||
# Setting global value of variable and inserting data in table
|
||||
SET @@global.max_sort_length = 30;
|
||||
SELECT @@global.max_sort_length;
|
||||
INSERT INTO t1 set c = repeat('x',29);
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'g','w');
|
||||
SELECT c from t1 ORDER BY c, id;
|
||||
SET @@max_sort_length = 70;
|
||||
SELECT @@max_sort_length;
|
||||
INSERT INTO t1 set c = repeat('x',69);
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t1 ORDER BY c, id DESC;
|
||||
--echo ** Results should be sorted **
|
||||
|
||||
# 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;
|
||||
INSERT INTO t1 set c = repeat('x',29);
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t1 set c = repeat('x',69);
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t1 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t1 ORDER BY c, id;
|
||||
--echo ** Results should not be sorted **
|
||||
|
||||
@ -210,26 +176,25 @@ SELECT c from t1 ORDER BY c, id;
|
||||
###########################################
|
||||
--echo Testing type CHAR
|
||||
# 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;
|
||||
INSERT INTO t2 set c = repeat('x',29);
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t2 set c = repeat('x',69);
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t2 ORDER BY c, id;
|
||||
--echo ** Results should not be sorted **
|
||||
|
||||
# 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;
|
||||
INSERT INTO t2 set c = repeat('x',29);
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',28),'g','w');
|
||||
INSERT INTO t2 set c = repeat('x',69);
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'r','x');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'s','y');
|
||||
INSERT INTO t2 set c = concat(repeat('x',68),'g','w');
|
||||
SELECT c from t2 ORDER BY c, id;
|
||||
--echo ** Results should not be sorted **
|
||||
|
||||
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
@ -239,12 +204,6 @@ connection default;
|
||||
disconnect test_con1;
|
||||
disconnect test_con2;
|
||||
|
||||
SET @@SESSION.max_sort_length = @session_max_sort_length;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
--enable_warnings
|
||||
DROP TABLE t, t1, t2;
|
||||
|
||||
SET @@global.max_sort_length= @start_value;
|
||||
|
@ -170,7 +170,7 @@ static pid_t pid;
|
||||
static char addr2line_binary[1024];
|
||||
static char output[1024];
|
||||
static struct pollfd poll_fds;
|
||||
Dl_info info;
|
||||
static Dl_info info;
|
||||
|
||||
int start_addr2line_fork(const char *binary_path)
|
||||
{
|
||||
|
@ -126,7 +126,7 @@ log_generic () {
|
||||
case $logging in
|
||||
init) ;; # Just echo the message, don't save it anywhere
|
||||
file)
|
||||
if [ -n "$helper" ]; then
|
||||
if [ "$helper_exist" -eq "0" ]; then
|
||||
echo "$msg" | "$helper" "$user" log "$err_log"
|
||||
fi
|
||||
;;
|
||||
@ -150,7 +150,7 @@ eval_log_error () {
|
||||
local cmd="$1"
|
||||
case $logging in
|
||||
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"`
|
||||
fi
|
||||
;;
|
||||
@ -533,10 +533,9 @@ fi
|
||||
|
||||
helper=`find_in_bin mysqld_safe_helper`
|
||||
print_defaults=`find_in_bin my_print_defaults`
|
||||
|
||||
# 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
|
||||
#
|
||||
@ -943,7 +942,6 @@ fi
|
||||
|
||||
# Avoid 'nohup: ignoring input' warning
|
||||
test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null"
|
||||
|
||||
log_notice "Starting $MYSQLD daemon with databases from $DATADIR"
|
||||
|
||||
# variable to track the current number of "fast" (a.k.a. subsecond) restarts
|
||||
|
@ -8494,7 +8494,7 @@ int Field_blob::store(const char *from,size_t length,CHARSET_INFO *cs)
|
||||
DBUG_ASSERT(length <= max_data_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)
|
||||
{
|
||||
new_length= Well_formed_prefix(cs,
|
||||
|
@ -1394,8 +1394,6 @@ public:
|
||||
virtual uint max_packed_col_length(uint max_length)
|
||||
{ return max_length;}
|
||||
|
||||
virtual bool is_packable() const { return false; }
|
||||
|
||||
uint offset(const uchar *record) const
|
||||
{
|
||||
return (uint) (ptr - record);
|
||||
@ -1988,7 +1986,6 @@ public:
|
||||
bool can_optimize_range(const Item_bool_func *cond,
|
||||
const Item *item,
|
||||
bool is_eq_func) const;
|
||||
bool is_packable() const { return true; }
|
||||
};
|
||||
|
||||
/* base class for float and double and decimal (old one) */
|
||||
|
@ -1978,14 +1978,7 @@ sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
|
||||
if (sortorder->field)
|
||||
{
|
||||
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();
|
||||
if (sortorder->is_variable_sized())
|
||||
set_if_smaller(sortorder->length, thd->variables.max_sort_length);
|
||||
|
||||
if (use_strnxfrm((cs=sortorder->field->sort_charset())))
|
||||
{
|
||||
*multi_byte_charset= true;
|
||||
@ -1996,10 +1989,6 @@ sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
|
||||
}
|
||||
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);
|
||||
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)
|
||||
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;
|
||||
}
|
||||
sortorder->field= (Field*) 0; // end marker
|
||||
|
@ -3322,6 +3322,13 @@ int handler::update_auto_increment()
|
||||
(table->auto_increment_field_not_null &&
|
||||
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
|
||||
statement (case of INSERT VALUES(null),(3763),(null):
|
||||
|
@ -5473,6 +5473,7 @@ void Item_func_like::print(String *str, enum_query_type query_type)
|
||||
longlong Item_func_like::val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
DBUG_ASSERT(escape != -1);
|
||||
String* res= args[0]->val_str(&cmp_value1);
|
||||
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,
|
||||
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");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
IF_DBUG(*escape= -1,);
|
||||
|
||||
if (escape_item->const_item())
|
||||
{
|
||||
/* 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);
|
||||
if (escape_str)
|
||||
{
|
||||
|
@ -2787,6 +2787,13 @@ public:
|
||||
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);
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
|
@ -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;
|
||||
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,
|
||||
default_charset_info);
|
||||
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);
|
||||
st.table= table;
|
||||
st.len= 0;
|
||||
st.maxlen= (size_t)thd->variables.group_concat_max_len;
|
||||
st.maxlen= thd->variables.group_concat_max_len;
|
||||
tree_walk(tree, ©_to_tree, &st, left_root_right);
|
||||
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,
|
||||
again, very slowly.
|
||||
*/
|
||||
#define GCONCAT_REPACK_FACTOR (1 << 10)
|
||||
#define GCONCAT_REPACK_FACTOR 10
|
||||
|
||||
bool Item_func_group_concat::add()
|
||||
{
|
||||
@ -4027,7 +4027,7 @@ bool Item_func_group_concat::add()
|
||||
{
|
||||
THD *thd= table->in_use;
|
||||
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)
|
||||
if (repack_tree(thd))
|
||||
return 1;
|
||||
@ -4082,9 +4082,9 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref)
|
||||
result.set_charset(collation.collation);
|
||||
result_field= 0;
|
||||
null_value= 1;
|
||||
max_length= (uint32)(thd->variables.group_concat_max_len
|
||||
/ collation.collation->mbminlen
|
||||
* collation.collation->mbmaxlen);
|
||||
max_length= (uint32)MY_MIN(thd->variables.group_concat_max_len
|
||||
/ collation.collation->mbminlen
|
||||
* collation.collation->mbmaxlen, UINT_MAX32);
|
||||
|
||||
uint32 offset;
|
||||
if (separator->needs_conversion(separator->length(), separator->charset(),
|
||||
|
@ -7800,9 +7800,9 @@ SEL_TREE *Item_func_in::get_func_mm_tree(RANGE_OPT_PARAM *param,
|
||||
{
|
||||
key_map::Iterator it(field->key_start);
|
||||
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= ¶m->table->key_info[key_no];
|
||||
KEY *key_info= &field->table->key_info[key_no];
|
||||
if (key_info->user_defined_key_parts == 1 &&
|
||||
(key_info->flags & HA_NOSAME))
|
||||
{
|
||||
|
@ -6231,6 +6231,7 @@ find_field_in_table_ref(THD *thd, TABLE_LIST *table_list,
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
/* Check if there are sufficient access rights to the found field. */
|
||||
if (check_privileges &&
|
||||
!table_list->is_derived() &&
|
||||
check_column_grant_in_table_ref(thd, *actual_table, name, length, fld))
|
||||
fld= WRONG_GRANT;
|
||||
else
|
||||
@ -8092,36 +8093,23 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
|
||||
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
/*
|
||||
Ensure that we have access rights to all fields to be inserted. Under
|
||||
some circumstances, this check may be skipped.
|
||||
Ensure that we have access rights to all fields to be inserted
|
||||
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
|
||||
the TABLE and TABLE_LIST objects (and both of these exist, of
|
||||
course), the check is skipped.
|
||||
- any_privileges is true
|
||||
|
||||
- If the SELECT privilege has been found fulfilled for the TABLE object
|
||||
and the TABLE_LIST represents a derived table other than a view (see
|
||||
below), the check is skipped.
|
||||
- the table is a derived table
|
||||
|
||||
- If the TABLE_LIST object represents a view, we may skip checking if
|
||||
the SELECT privilege has been found fulfilled for it, regardless of
|
||||
the TABLE object.
|
||||
- the table is a view with SELECT privilege
|
||||
|
||||
- If there is no TABLE object, the test is skipped if either
|
||||
* 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.
|
||||
- the table is a base table with SELECT privilege
|
||||
*/
|
||||
if (!((table && tables->is_non_derived() &&
|
||||
(table->grant.privilege & SELECT_ACL)) ||
|
||||
((!tables->is_non_derived() &&
|
||||
(tables->grant.privilege & SELECT_ACL)))) &&
|
||||
!any_privileges)
|
||||
if (!any_privileges &&
|
||||
!tables->is_derived() &&
|
||||
!(tables->is_view() && (tables->grant.privilege & SELECT_ACL)) &&
|
||||
!(table && (table->grant.privilege & SELECT_ACL)))
|
||||
{
|
||||
field_iterator.set(tables);
|
||||
if (check_grant_all_columns(thd, SELECT_ACL, &field_iterator))
|
||||
|
@ -1449,7 +1449,7 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
|
||||
DBUG_PRINT("qcache", ("\
|
||||
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, \
|
||||
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",
|
||||
(int)flags.client_long_flag,
|
||||
(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", ("\
|
||||
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, \
|
||||
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",
|
||||
(int)flags.client_long_flag,
|
||||
(int)flags.client_protocol_41,
|
||||
|
@ -558,11 +558,11 @@ struct Query_cache_query_flags
|
||||
uint character_set_client_num;
|
||||
uint character_set_results_num;
|
||||
uint collation_connection_num;
|
||||
uint group_concat_max_len;
|
||||
ha_rows limit;
|
||||
Time_zone *time_zone;
|
||||
sql_mode_t sql_mode;
|
||||
ulonglong max_sort_length;
|
||||
ulonglong group_concat_max_len;
|
||||
size_t default_week_format;
|
||||
size_t div_precision_increment;
|
||||
MY_LOCALE *lc_time_names;
|
||||
|
@ -592,7 +592,6 @@ typedef struct system_variables
|
||||
ulonglong bulk_insert_buff_size;
|
||||
ulonglong join_buff_size;
|
||||
ulonglong sortbuff_size;
|
||||
ulonglong group_concat_max_len;
|
||||
ulonglong default_regex_flags;
|
||||
ulonglong max_mem_used;
|
||||
|
||||
@ -685,6 +684,8 @@ typedef struct system_variables
|
||||
uint32 gtid_domain_id;
|
||||
uint64 gtid_seq_no;
|
||||
|
||||
uint group_concat_max_len;
|
||||
|
||||
/**
|
||||
Default transaction access mode. READ ONLY (true) or READ WRITE (false).
|
||||
*/
|
||||
@ -5787,10 +5788,15 @@ class select_union_recursive :public select_unit
|
||||
public:
|
||||
/* The temporary table with the new records generated by one iterative step */
|
||||
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) */
|
||||
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
|
||||
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_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);
|
||||
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 suffix_length; /* Length suffix (0-4) */
|
||||
enum Type { FIXED_SIZE, VARIABLE_SIZE } type;
|
||||
bool is_variable_sized() { return type == VARIABLE_SIZE; }
|
||||
};
|
||||
|
||||
|
||||
|
@ -252,6 +252,8 @@ With_element *With_clause::find_table_def(TABLE_LIST *table,
|
||||
!table->is_fqtn)
|
||||
{
|
||||
table->set_derived();
|
||||
table->db.str= empty_c_string;
|
||||
table->db.length= 0;
|
||||
return with_elem;
|
||||
}
|
||||
}
|
||||
@ -887,8 +889,6 @@ st_select_lex_unit *With_element::clone_parsed_spec(THD *thd,
|
||||
goto err;
|
||||
spec_tables_tail= tbl;
|
||||
}
|
||||
if (check_table_access(thd, SELECT_ACL, spec_tables, FALSE, UINT_MAX, FALSE))
|
||||
goto err;
|
||||
if (spec_tables)
|
||||
{
|
||||
if (with_table->next_global)
|
||||
@ -914,6 +914,22 @@ st_select_lex_unit *With_element::clone_parsed_spec(THD *thd,
|
||||
with_select));
|
||||
if (check_dependencies_in_with_clauses(lex->with_clauses_list))
|
||||
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_end(lex);
|
||||
err:
|
||||
@ -1466,10 +1482,11 @@ void With_element::print(String *str, enum_query_type query_type)
|
||||
|
||||
bool With_element::instantiate_tmp_tables()
|
||||
{
|
||||
List_iterator_fast<TABLE> li(rec_result->rec_tables);
|
||||
TABLE *rec_table;
|
||||
while ((rec_table= li++))
|
||||
List_iterator_fast<TABLE_LIST> li(rec_result->rec_table_refs);
|
||||
TABLE_LIST *rec_tbl;
|
||||
while ((rec_tbl= li++))
|
||||
{
|
||||
TABLE *rec_table= rec_tbl->table;
|
||||
if (!rec_table->is_created() &&
|
||||
instantiate_tmp_table(rec_table,
|
||||
rec_table->s->key_info,
|
||||
|
@ -710,7 +710,7 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||
if (derived->is_with_table_recursive_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);
|
||||
@ -808,17 +808,17 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||
|
||||
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
|
||||
|
||||
lex->context_analysis_only|= CONTEXT_ANALYSIS_ONLY_DERIVED;
|
||||
// st_select_lex_unit::prepare correctly work for single select
|
||||
if ((res= unit->prepare(derived, derived->derived_result, 0)))
|
||||
goto exit;
|
||||
if (derived->with &&
|
||||
(res= derived->with->rename_columns_of_derived_unit(thd, unit)))
|
||||
goto exit;
|
||||
lex->context_analysis_only&= ~CONTEXT_ANALYSIS_ONLY_DERIVED;
|
||||
if ((res= check_duplicate_names(thd, unit->types, 0)))
|
||||
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
|
||||
be created.
|
||||
*/
|
||||
if (derived->init_derived(thd, FALSE))
|
||||
if (!derived->is_with_table_recursive_reference() &&
|
||||
derived->init_derived(thd, FALSE))
|
||||
goto exit;
|
||||
|
||||
/*
|
||||
|
@ -742,6 +742,9 @@ static bool mysqld_help_internal(THD *thd, const char *mask)
|
||||
&name, &description, &example);
|
||||
delete select;
|
||||
|
||||
if (thd->is_error())
|
||||
goto error;
|
||||
|
||||
if (count_topics == 0)
|
||||
{
|
||||
int UNINIT_VAR(key_id);
|
||||
|
@ -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 no_errors)
|
||||
{
|
||||
if (tables->derived)
|
||||
return 0;
|
||||
|
||||
Switch_to_definer_security_ctx backup_sctx(thd, tables);
|
||||
|
||||
const char *db_name;
|
||||
|
@ -13363,10 +13363,6 @@ void 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",
|
||||
this,
|
||||
(table ? table->s->db.str : "?"),
|
||||
|
@ -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},
|
||||
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0,
|
||||
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},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
|
||||
};
|
||||
|
@ -3655,8 +3655,6 @@ public:
|
||||
const Type_std_attributes *item,
|
||||
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 Item_decimal_notation_int_digits(const Item *item) const { return 0; }
|
||||
virtual uint32 calc_pack_length(uint32 length) const= 0;
|
||||
@ -4816,8 +4814,6 @@ public:
|
||||
const Type_std_attributes *item,
|
||||
SORT_FIELD_ATTR *attr) const;
|
||||
|
||||
bool is_packable()const { return true; }
|
||||
|
||||
bool union_element_finalize(const Item * item) const;
|
||||
|
||||
bool Column_definition_prepare_stage1(THD *thd,
|
||||
|
@ -405,7 +405,10 @@ select_union_recursive::create_result_table(THD *thd_arg,
|
||||
hidden))
|
||||
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,
|
||||
options, HA_POS_ERROR, &empty_clex_str,
|
||||
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++)
|
||||
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;
|
||||
}
|
||||
|
||||
@ -466,23 +455,25 @@ void select_union_recursive::cleanup()
|
||||
free_tmp_table(thd, incr_table);
|
||||
}
|
||||
|
||||
List_iterator<TABLE> it(rec_tables);
|
||||
TABLE *tab;
|
||||
while ((tab= it++))
|
||||
List_iterator<TABLE_LIST> it(rec_table_refs);
|
||||
TABLE_LIST *tbl;
|
||||
while ((tbl= it++))
|
||||
{
|
||||
TABLE *tab= tbl->table;
|
||||
if (tab->is_created())
|
||||
{
|
||||
tab->file->extra(HA_EXTRA_RESET_STATE);
|
||||
tab->file->ha_delete_all_rows();
|
||||
}
|
||||
/*
|
||||
/*
|
||||
The table will be closed later in close_thread_tables(),
|
||||
because it might be used in the statements like
|
||||
ANALYZE WITH r AS (...) SELECT * from r
|
||||
where r is defined through recursion.
|
||||
where r is defined through recursion.
|
||||
*/
|
||||
tab->next= thd->rec_tables;
|
||||
thd->rec_tables= tab;
|
||||
tbl->derived_result= 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1138,9 +1129,33 @@ bool st_select_lex_unit::prepare(TABLE_LIST *derived_arg,
|
||||
goto err;
|
||||
if (!derived_arg->table)
|
||||
{
|
||||
derived_arg->table= with_element->rec_result->rec_tables.head();
|
||||
if (derived_arg->derived_result)
|
||||
derived_arg->derived_result->table= derived_arg->table;
|
||||
bool res= false;
|
||||
|
||||
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();
|
||||
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;
|
||||
st_select_lex *end= NULL;
|
||||
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;
|
||||
ha_rows examined_rows= 0;
|
||||
bool was_executed= executed;
|
||||
TABLE *rec_table;
|
||||
TABLE_LIST *rec_tbl;
|
||||
|
||||
DBUG_ENTER("st_select_lex_unit::exec_recursive");
|
||||
|
||||
@ -1865,8 +1880,9 @@ bool st_select_lex_unit::exec_recursive()
|
||||
else
|
||||
with_element->level++;
|
||||
|
||||
while ((rec_table= li++))
|
||||
while ((rec_tbl= li++))
|
||||
{
|
||||
TABLE *rec_table= rec_tbl->table;
|
||||
saved_error=
|
||||
incr_table->insert_all_rows_into_tmp_table(thd, rec_table,
|
||||
tmp_table_param,
|
||||
|
@ -1852,7 +1852,11 @@ int mysql_multi_update_prepare(THD *thd)
|
||||
During prepare phase acquire only S metadata locks instead of SW locks to
|
||||
keep prepare of multi-UPDATE compatible with concurrent LOCK TABLES WRITE
|
||||
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 (open_tables(thd, &table_list, &table_count,
|
||||
@ -1875,6 +1879,9 @@ int mysql_multi_update_prepare(THD *thd)
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
lex->context_analysis_only&= ~CONTEXT_ANALYSIS_ONLY_DERIVED;
|
||||
|
||||
(void) read_statistics_for_tables_if_needed(thd, table_list);
|
||||
/* @todo: downgrade the metadata locks here. */
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
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
|
||||
will be done on column level after preparation,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user