337 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			337 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| # WL #3031 This test tests the new servers table as well as
 | |
| # if federated can utilise the servers table
 | |
| -- source suite/federated/include/federated.inc
 | |
| 
 | |
| connection slave;
 | |
| create database first_db;
 | |
| create database second_db;
 | |
| 
 | |
| use first_db;
 | |
| 
 | |
| DROP TABLE IF EXISTS first_db.t1;
 | |
| CREATE TABLE first_db.t1 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   DEFAULT CHARSET=latin1;
 | |
| 
 | |
| DROP TABLE IF EXISTS first_db.t2;
 | |
| CREATE TABLE first_db.t2 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   DEFAULT CHARSET=latin1;
 | |
| 
 | |
| use second_db;
 | |
| DROP TABLE IF EXISTS second_db.t1;
 | |
| CREATE TABLE second_db.t1 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   DEFAULT CHARSET=latin1;
 | |
| 
 | |
| DROP TABLE IF EXISTS second_db.t2;
 | |
| CREATE TABLE second_db.t2 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   DEFAULT CHARSET=latin1;
 | |
| 
 | |
| connection master;
 | |
| 
 | |
| drop server if exists 'server_one';
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval create server 'server_one' foreign data wrapper 'mysql' options
 | |
|   (HOST '127.0.0.1',
 | |
|   DATABASE 'first_db',
 | |
|   USER 'root',
 | |
|   PASSWORD '',
 | |
|   PORT $SLAVE_MYPORT,
 | |
|   SOCKET '',
 | |
|   OWNER 'root');
 | |
| 
 | |
| drop server if exists 'server_two';
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval create server 'server_two' foreign data wrapper 'mysql' options
 | |
|   (HOST '127.0.0.1',
 | |
|   DATABASE 'second_db',
 | |
|   USER 'root',
 | |
|   PASSWORD '',
 | |
|   PORT $SLAVE_MYPORT,
 | |
|   SOCKET '',
 | |
|   OWNER 'root');
 | |
| 
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| # Adding 'order by' clause here, in order to maintain consistent result out of the select query. 
 | |
| #eval select * from mysql.servers;
 | |
| eval select * from mysql.servers order by Server_name;
 | |
| 
 | |
| DROP TABLE IF EXISTS federated.old;
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval CREATE TABLE federated.old (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   ENGINE="FEDERATED" DEFAULT CHARSET=latin1
 | |
|   CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/first_db/t1';
 | |
| 
 | |
| INSERT INTO federated.old (id, name) values (1, 'federated.old-> first_db.t1, url format');
 | |
| 
 | |
| SELECT * FROM federated.old;
 | |
| 
 | |
| DROP TABLE IF EXISTS federated.old2;
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval CREATE TABLE federated.old2 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   ENGINE="FEDERATED" DEFAULT CHARSET=latin1
 | |
|   CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/first_db/t2';
 | |
| 
 | |
| INSERT INTO federated.old2 (id, name) values (1, 'federated.old2-> first_db.t2, url format');
 | |
| SELECT * FROM federated.old2;
 | |
| 
 | |
| DROP TABLE IF EXISTS federated.urldb2t1;
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval CREATE TABLE federated.urldb2t1 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   ENGINE="FEDERATED" DEFAULT CHARSET=latin1
 | |
|   CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/second_db/t1';
 | |
| INSERT INTO federated.urldb2t1 (id, name) values (1, 'federated.urldb2t1 -> second_db.t1, url format');
 | |
| SELECT * FROM federated.urldb2t1;
 | |
| 
 | |
| DROP TABLE IF EXISTS federated.urldb2t2;
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval CREATE TABLE federated.urldb2t2 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   ENGINE="FEDERATED" DEFAULT CHARSET=latin1
 | |
|   CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/second_db/t2';
 | |
| INSERT INTO federated.urldb2t2 (id, name) values (1, 'federated.urldb2t2 -> second_db.t2, url format');
 | |
| SELECT * FROM federated.urldb2t2;
 | |
| 
 | |
| DROP TABLE IF EXISTS federated.t1;
 | |
| CREATE TABLE federated.t1 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   ENGINE="FEDERATED" DEFAULT CHARSET=latin1
 | |
|   CONNECTION='server_one';
 | |
| 
 | |
| INSERT INTO federated.t1 (id, name) values (1, 'server_one, new scheme, first_db.t1');
 | |
| 
 | |
| SELECT * FROM federated.t1;
 | |
| 
 | |
| DROP TABLE IF EXISTS federated.whatever;
 | |
| CREATE TABLE federated.whatever (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   ENGINE="FEDERATED" DEFAULT CHARSET=latin1
 | |
|   CONNECTION='server_one/t1';
 | |
| INSERT INTO federated.whatever (id, name) values (1, 'server_one, new scheme, whatever, first_db.t1');
 | |
| SELECT * FROM federated.whatever;
 | |
| 
 | |
| ALTER SERVER 'server_one' options(DATABASE 'second_db');
 | |
| 
 | |
| # FLUSH TABLES is now unneccessary
 | |
| 
 | |
| INSERT INTO federated.t1 (id, name) values (1, 'server_two, new scheme, second_db.t1');
 | |
| SELECT * FROM federated.t1;
 | |
| 
 | |
| INSERT INTO federated.whatever (id, name) values (1, 'server_two, new scheme, whatever, second_db.t1');
 | |
| SELECT * FROM federated.whatever;
 | |
| 
 | |
| drop table federated.t1;
 | |
| 
 | |
| drop server 'server_one';
 | |
| drop server 'server_two';
 | |
| # Adding 'order by' clause here, in order to maintain consistent result out of the select query.
 | |
| #select * from mysql.servers;
 | |
| eval select * from mysql.servers order by Server_name;
 | |
| 
 | |
| connection slave;
 | |
| drop table first_db.t1;
 | |
| drop table second_db.t1;
 | |
| drop database first_db;
 | |
| drop database second_db;
 | |
| 
 | |
| #
 | |
| # Bug#25671 - CREATE/DROP/ALTER SERVER should require privileges
 | |
| #
 | |
| # Changes to SERVER declarations should require SUPER privilege.
 | |
| # Based upon test case by Giuseppe Maxia
 | |
| 
 | |
| create database db_legitimate;
 | |
| create database db_bogus;
 | |
| 
 | |
| use db_legitimate;
 | |
| CREATE TABLE db_legitimate.t1 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     );
 | |
| INSERT INTO db_legitimate.t1 VALUES ('1','this is legitimate');
 | |
| 
 | |
| use db_bogus;
 | |
| CREATE TABLE db_bogus.t1 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     )
 | |
|   ;
 | |
| INSERT INTO db_bogus.t1 VALUES ('2','this is bogus');
 | |
| 
 | |
| connection master;
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval create server 's1' foreign data wrapper 'mysql' options
 | |
|   (HOST '127.0.0.1',
 | |
|   DATABASE 'db_legitimate',
 | |
|   USER 'root',
 | |
|   PASSWORD '',
 | |
|   PORT $SLAVE_MYPORT,
 | |
|   SOCKET '',
 | |
|   OWNER 'root');
 | |
| 
 | |
| create user guest_select@localhost;
 | |
| grant select on federated.* to guest_select@localhost;
 | |
| 
 | |
| create user guest_super@localhost;
 | |
| grant select,SUPER,RELOAD on *.* to guest_super@localhost;
 | |
| 
 | |
| create user guest_usage@localhost;
 | |
| grant usage on *.* to guest_usage@localhost;
 | |
| 
 | |
| CREATE TABLE federated.t1 (
 | |
|     `id` int(20) NOT NULL,
 | |
|     `name` varchar(64) NOT NULL default ''
 | |
|     ) ENGINE = FEDERATED CONNECTION = 's1';
 | |
| 
 | |
| select * from federated.t1;
 | |
| 
 | |
| connect (conn_select,127.0.0.1,guest_select,,federated,$MASTER_MYPORT);
 | |
| connect (conn_usage,127.0.0.1,guest_usage,,,$MASTER_MYPORT);
 | |
| connect (conn_super,127.0.0.1,guest_super,,,$MASTER_MYPORT);
 | |
| 
 | |
| connection conn_select;
 | |
| --error ER_SPECIFIC_ACCESS_DENIED_ERROR
 | |
| alter server s1 options (database 'db_bogus');
 | |
| 
 | |
| connection master;
 | |
| flush tables;
 | |
| select * from federated.t1;
 | |
| 
 | |
| connection conn_usage;
 | |
| --error ER_SPECIFIC_ACCESS_DENIED_ERROR
 | |
| alter server s1 options (database 'db_bogus');
 | |
| 
 | |
| connection master;
 | |
| flush tables;
 | |
| select * from federated.t1;
 | |
| 
 | |
| connection conn_super;
 | |
| alter server s1 options (database 'db_bogus');
 | |
| 
 | |
| connection master;
 | |
| flush tables;
 | |
| select * from federated.t1;
 | |
| 
 | |
| connection conn_select;
 | |
| --error ER_SPECIFIC_ACCESS_DENIED_ERROR
 | |
| drop server if exists 's1';
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| --error ER_SPECIFIC_ACCESS_DENIED_ERROR
 | |
| eval create server 's1' foreign data wrapper 'mysql' options
 | |
|   (HOST '127.0.0.1',
 | |
|   DATABASE 'db_legitimate',
 | |
|   USER 'root',
 | |
|   PASSWORD '',
 | |
|   PORT $SLAVE_MYPORT,
 | |
|   SOCKET '',
 | |
|   OWNER 'root');
 | |
| 
 | |
| connection conn_super;
 | |
| drop server 's1';
 | |
| --replace_result $SLAVE_MYPORT SLAVE_PORT
 | |
| eval create server 's1' foreign data wrapper 'mysql' options
 | |
|   (HOST '127.0.0.1',
 | |
|   DATABASE 'db_legitimate',
 | |
|   USER 'root',
 | |
|   PASSWORD '',
 | |
|   PORT $SLAVE_MYPORT,
 | |
|   SOCKET '',
 | |
|   OWNER 'root');
 | |
| 
 | |
| connection master;
 | |
| flush tables;
 | |
| select * from federated.t1;
 | |
| 
 | |
| # clean up test
 | |
| connection slave;
 | |
| drop database db_legitimate;
 | |
| drop database db_bogus;
 | |
| 
 | |
| disconnect conn_select;
 | |
| disconnect conn_usage;
 | |
| disconnect conn_super;
 | |
| 
 | |
| connection master;
 | |
| drop user guest_super@localhost;
 | |
| drop user guest_usage@localhost;
 | |
| drop user guest_select@localhost;
 | |
| drop table federated.t1;
 | |
| drop server 's1';
 | |
| 
 | |
| #
 | |
| # Bug#30671 - ALTER SERVER causes the server to crash
 | |
| #
 | |
| create server 's1' foreign data wrapper 'mysql' options (port 3306);
 | |
| alter server 's1' options
 | |
|   (host 'localhost', database '', user '',
 | |
|   password '', socket '', owner '', port 3306);
 | |
| # The next statement would crash unpatched server
 | |
| alter server 's1' options
 | |
|   (host 'localhost', database 'database1', user '',
 | |
|   password '', socket '', owner '', port 3306);
 | |
| drop server 's1';
 | |
| 
 | |
| --echo # End of 5.1 tests
 | |
| 
 | |
| 
 | |
| #
 | |
| # Bug#25721 - deadlock with ALTER/CREATE SERVER
 | |
| #
 | |
| connect (other,localhost,root,,);
 | |
| connection master;
 | |
| use test;
 | |
| delimiter //;
 | |
| create procedure p1 ()
 | |
| begin
 | |
|   DECLARE v INT DEFAULT 0;
 | |
|   DECLARE i INT;
 | |
|   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
 | |
|   SET i = sleep(5);
 | |
|   WHILE v < 10000 do
 | |
|     CREATE SERVER s
 | |
|       FOREIGN DATA WRAPPER mysql
 | |
|       OPTIONS (USER 'Remote', HOST '192.168.1.106', DATABASE 'test');
 | |
|     ALTER SERVER s OPTIONS (USER 'Remote');
 | |
| 	DROP SERVER s;
 | |
|     SET v = v + 1;
 | |
|   END WHILE;
 | |
| END//
 | |
| delimiter ;//
 | |
| connection other;
 | |
| use test;
 | |
| send call p1();
 | |
| connection master;
 | |
| call p1();
 | |
| connection other;
 | |
| reap;
 | |
| drop procedure p1;
 | |
| drop server if exists s;
 | |
| 
 | |
| 
 | |
| source suite/federated/include/federated_cleanup.inc;
 |