Merge branch '10.0' into 10.1
This commit is contained in:
commit
e3d89652e5
@ -221,21 +221,11 @@ NULL
|
||||
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Start of 5.3 tests
|
||||
#
|
||||
#
|
||||
# MDEV-4512 Valgrind warnings in my_long10_to_str_8bit on INTERVAL and DATE_ADD with incorrect types
|
||||
#
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (10),(11);
|
||||
SELECT INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 ) FROM t1;
|
||||
INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 )
|
||||
8
|
||||
8
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '10' for column 'pk' at row 1
|
||||
Warning 1292 Incorrect datetime value: '11' for column 'pk' at row 2
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 5.3 tests
|
||||
# MDEV-14596 Crash in INTERVAL(ROW(..),ROW(..))
|
||||
#
|
||||
SELECT INTERVAL(ROW(1,1),ROW(1,2));
|
||||
ERROR 21000: Operand should contain 1 column(s)
|
||||
SELECT INTERVAL(1,ROW(1,2));
|
||||
ERROR 21000: Operand should contain 1 column(s)
|
||||
SELECT INTERVAL(ROW(1,2),1);
|
||||
ERROR 21000: Operand should contain 1 column(s)
|
||||
|
@ -2636,6 +2636,31 @@ create table t2 (c1 int, c2 int);
|
||||
select t1.c1 as c1, t2.c2 as c1 from t1, t2 where t1.c1 < 20 and t2.c2 > 5 group by t1.c1, t2.c2 having t1.c1 < 3;
|
||||
c1 c1
|
||||
drop table t1, t2;
|
||||
SET @old_sort_buff_size = @@sort_buffer_size;
|
||||
SET @@sort_buffer_size=256*1024;
|
||||
CREATE TABLE t1 (c INT) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES
|
||||
(2011),(1977),(1982),(2027),(2023),(NULL),(NULL),(2004),(1974),(2032),
|
||||
(1993),(NULL),(1995),(2034),(NULL),(2009),(1900),(NULL),(2025),(1900),
|
||||
(2033),(1900),(2012),(NULL),(2009),(1992),(1974),(1974),(2012),(2028),
|
||||
(2007),(2012),(1900),(1983),(1900),(2010),(1987),(1994),(1981),(2032),
|
||||
(2010),(1989),(2014),(1900),(1900),(1976),(1978),(2007),(2030),(NULL),
|
||||
(2002),(1997),(1900),(NULL),(2000),(2027),(1975),(2026),(1975),(2026),
|
||||
(2029),(1977),(1900),(1900),(2031),(1993),(1986),(2012),(1979),(2013),
|
||||
(1994),(2014),(2025),(2006),(1971),(1974),(2021),(2011),(NULL),(1991),
|
||||
(2001),(1977),(2023),(2012),(1900),(1978),(1998),(NULL),(1988),(1999),
|
||||
(2017),(2008),(1976),(1900),(2005),(2030),(2023),(1900),(1978),(1990),
|
||||
(1978),(1987),(2030),(1900),(2034),(2006),(2015),(2001),(2019),(2024),
|
||||
(2030),(1989),(1997),(2007),(2023),(1994),(1971),(2011),(2011),(2015),
|
||||
(1984),(1978),(1979),(1989),(2008),(2030);
|
||||
SELECT ExtractValue('<a></a>','/a') AS f1, SPACE(c) AS f2 FROM t1 GROUP BY f1, f2 WITH ROLLUP;
|
||||
f1 f2
|
||||
NULL
|
||||
|
||||
NULL
|
||||
NULL NULL
|
||||
SET @@sort_buffer_size = @old_sort_buff_size;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #58782
|
||||
# Missing rows with SELECT .. WHERE .. IN subquery
|
||||
|
@ -698,6 +698,21 @@ id column_1
|
||||
expected -- 1 row(s) returned not ER_BAD_FIELD_ERROR
|
||||
drop table t1;
|
||||
#
|
||||
# mdev-14368: grouping query with alias for aggregate function in HAVING
|
||||
# when sql_mode = 'ONLY_FULL_GROUP_BY'
|
||||
set @save_sql_mode= @@sql_mode;
|
||||
set sql_mode = 'ONLY_FULL_GROUP_BY';
|
||||
create table t1(a int);
|
||||
insert t1 values (4),(1),(2),(1), (3),(4);
|
||||
SELECT a, COUNT(a) as ct FROM t1 GROUP BY a HAVING ct>0;
|
||||
a ct
|
||||
1 2
|
||||
2 1
|
||||
3 1
|
||||
4 2
|
||||
set sql_mode=@save_sql_mode;
|
||||
drop table t1;
|
||||
#
|
||||
# Bug mdev-5160: two-way join with HAVING over the second table
|
||||
#
|
||||
CREATE TABLE t1 (c1 varchar(6)) ENGINE=MyISAM;
|
||||
|
@ -2433,5 +2433,18 @@ Warnings:
|
||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0)
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields
|
||||
#
|
||||
CREATE TABLE t1 (b1 BIT NOT NULL);
|
||||
INSERT INTO t1 VALUES (0),(1);
|
||||
CREATE TABLE t2 (b2 BIT NOT NULL);
|
||||
INSERT INTO t2 VALUES (0),(1);
|
||||
SET SESSION JOIN_CACHE_LEVEL = 3;
|
||||
SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2;
|
||||
t1.b1+'0' t2.b2 + '0'
|
||||
0 0
|
||||
1 1
|
||||
DROP TABLE t1, t2;
|
||||
# end of 5.5 tests
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
@ -2444,6 +2444,19 @@ Warnings:
|
||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0)
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields
|
||||
#
|
||||
CREATE TABLE t1 (b1 BIT NOT NULL);
|
||||
INSERT INTO t1 VALUES (0),(1);
|
||||
CREATE TABLE t2 (b2 BIT NOT NULL);
|
||||
INSERT INTO t2 VALUES (0),(1);
|
||||
SET SESSION JOIN_CACHE_LEVEL = 3;
|
||||
SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2;
|
||||
t1.b1+'0' t2.b2 + '0'
|
||||
0 0
|
||||
1 1
|
||||
DROP TABLE t1, t2;
|
||||
# end of 5.5 tests
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
set join_cache_level=default;
|
||||
|
@ -5662,6 +5662,20 @@ PREPARE stmt FROM 'REPLACE INTO v2 SELECT a FROM t3';
|
||||
ERROR HY000: Can not insert into join view 'test.v2' without fields list
|
||||
drop view v1,v2;
|
||||
drop table t3;
|
||||
#
|
||||
# MDEV-14619: VIEW and GROUP_CONCAT
|
||||
#
|
||||
CREATE TABLE t1 (str text);
|
||||
INSERT INTO t1 VALUES ("My"),("SQL");
|
||||
CREATE VIEW v1 AS SELECT GROUP_CONCAT(str SEPARATOR '\\') FROM t1;
|
||||
SELECT * FROM v1;
|
||||
GROUP_CONCAT(str SEPARATOR '\\')
|
||||
My\SQL
|
||||
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 select group_concat(`t1`.`str` separator '\\') AS `GROUP_CONCAT(str SEPARATOR '\\')` from `t1` latin1 latin1_swedish_ci
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
# -----------------------------------------------------------------
|
||||
# -- End of 5.5 tests.
|
||||
# -----------------------------------------------------------------
|
||||
|
@ -1360,3 +1360,9 @@ SELECT * FROM t1;
|
||||
c1
|
||||
1e19
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a DOUBLE PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (-1);
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
-1
|
||||
DROP TABLE t1;
|
||||
|
@ -692,3 +692,8 @@ CREATE TABLE t1 (
|
||||
INSERT INTO t1 VALUES ();
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (a DOUBLE PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (-1);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
37
mysql-test/suite/parts/inc/part_alter_values.inc
Normal file
37
mysql-test/suite/parts/inc/part_alter_values.inc
Normal file
@ -0,0 +1,37 @@
|
||||
--echo #
|
||||
--echo # MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine
|
||||
--echo #
|
||||
|
||||
--eval CREATE TABLE t1 (i INT) ENGINE=$engine PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
ALTER TABLE t1 DROP PARTITION p1;
|
||||
SELECT * FROM t1;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-13788 Server crash when issuing bad SQL partition syntax
|
||||
--echo #
|
||||
|
||||
--eval CREATE TABLE t1 (id int, d date) ENGINE=$engine PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE))
|
||||
SHOW CREATE TABLE t1;
|
||||
--error ER_PARTITION_REQUIRES_VALUES_ERROR
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--eval CREATE TABLE t1 (id int, d date) ENGINE=$engine PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3))
|
||||
SHOW CREATE TABLE t1;
|
||||
--error ER_PARTITION_REQUIRES_VALUES_ERROR
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES IN (4,5,6)
|
||||
);
|
||||
DROP TABLE t1;
|
49
mysql-test/suite/parts/r/partition_alter_innodb.result
Normal file
49
mysql-test/suite/parts/r/partition_alter_innodb.result
Normal file
@ -0,0 +1,49 @@
|
||||
#
|
||||
# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine
|
||||
#
|
||||
CREATE TABLE t1 (i INT) ENGINE=InnoDB PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
ALTER TABLE t1 DROP PARTITION p1;
|
||||
SELECT * FROM t1;
|
||||
i
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-13788 Server crash when issuing bad SQL partition syntax
|
||||
#
|
||||
CREATE TABLE t1 (id int, d date) ENGINE=InnoDB PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`d` date DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50500 PARTITION BY RANGE COLUMNS(d)
|
||||
(PARTITION p1 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (id int, d date) ENGINE=InnoDB PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`d` date DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY LIST (id)
|
||||
(PARTITION p1 VALUES IN (1,2,3) ENGINE = InnoDB) */
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES IN (4,5,6)
|
||||
);
|
||||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
|
||||
DROP TABLE t1;
|
@ -16,3 +16,47 @@ select * from t1;
|
||||
pk dt
|
||||
1 2017-09-28 15:12:00
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine
|
||||
#
|
||||
CREATE TABLE t1 (i INT) ENGINE=Aria PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
ALTER TABLE t1 DROP PARTITION p1;
|
||||
SELECT * FROM t1;
|
||||
i
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-13788 Server crash when issuing bad SQL partition syntax
|
||||
#
|
||||
CREATE TABLE t1 (id int, d date) ENGINE=Aria PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`d` date DEFAULT NULL
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1
|
||||
/*!50500 PARTITION BY RANGE COLUMNS(d)
|
||||
(PARTITION p1 VALUES LESS THAN (MAXVALUE) ENGINE = Aria) */
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (id int, d date) ENGINE=Aria PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`d` date DEFAULT NULL
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY LIST (id)
|
||||
(PARTITION p1 VALUES IN (1,2,3) ENGINE = Aria) */
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES IN (4,5,6)
|
||||
);
|
||||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
|
||||
DROP TABLE t1;
|
||||
|
@ -1,10 +1,44 @@
|
||||
CREATE TABLE t1 (i INT) ENGINE=MYISAM
|
||||
PARTITION BY LIST(i) (
|
||||
PARTITION p0 VALUES IN (1),
|
||||
PARTITION p1 VALUES IN (2)
|
||||
);
|
||||
#
|
||||
# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine
|
||||
#
|
||||
CREATE TABLE t1 (i INT) ENGINE=MyISAM PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
ALTER TABLE t1 DROP PARTITION p1;
|
||||
SELECT * FROM t1;
|
||||
i
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-13788 Server crash when issuing bad SQL partition syntax
|
||||
#
|
||||
CREATE TABLE t1 (id int, d date) ENGINE=MyISAM PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`d` date DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50500 PARTITION BY RANGE COLUMNS(d)
|
||||
(PARTITION p1 VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) */
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (id int, d date) ENGINE=MyISAM PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`d` date DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY LIST (id)
|
||||
(PARTITION p1 VALUES IN (1,2,3) ENGINE = MyISAM) */
|
||||
ALTER TABLE t1 REORGANIZE PARTITION p1 INTO
|
||||
(
|
||||
PARTITION p2, /* Notice no values */
|
||||
PARTITION p3 VALUES IN (4,5,6)
|
||||
);
|
||||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
|
||||
DROP TABLE t1;
|
||||
|
4
mysql-test/suite/parts/t/partition_alter_innodb.test
Normal file
4
mysql-test/suite/parts/t/partition_alter_innodb.test
Normal file
@ -0,0 +1,4 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_partition.inc
|
||||
--let $engine=InnoDB
|
||||
--source inc/part_alter_values.inc
|
@ -16,3 +16,6 @@ select * from t1;
|
||||
alter table t1 drop partition p20181231;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
--let $engine=Aria
|
||||
--source inc/part_alter_values.inc
|
||||
|
@ -1,17 +1,3 @@
|
||||
#
|
||||
# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine
|
||||
#
|
||||
|
||||
--source include/have_partition.inc
|
||||
|
||||
CREATE TABLE t1 (i INT) ENGINE=MYISAM
|
||||
PARTITION BY LIST(i) (
|
||||
PARTITION p0 VALUES IN (1),
|
||||
PARTITION p1 VALUES IN (2)
|
||||
);
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
ALTER TABLE t1 DROP PARTITION p1;
|
||||
SELECT * FROM t1;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
--let $engine=MyISAM
|
||||
--source inc/part_alter_values.inc
|
||||
|
539
mysql-test/suite/roles/flush_roles-12366.result
Normal file
539
mysql-test/suite/roles/flush_roles-12366.result
Normal file
@ -0,0 +1,539 @@
|
||||
#
|
||||
# MDEV-12366: FLUSH PRIVILEGES can break hierarchy of roles
|
||||
#
|
||||
# This testcase contains a user, who is granted a master role
|
||||
# operations_cluster. operations_cluster is granted 8 different roles
|
||||
# who in turn each have 4 different roles granted to them.
|
||||
#
|
||||
# Only the leaf roles contain privileges to access databases.
|
||||
# Make sure the user has access to all databases if the master role
|
||||
# is granted to him.
|
||||
#
|
||||
CREATE USER u;
|
||||
CREATE ROLE operations_cluster;
|
||||
GRANT operations_cluster TO u;
|
||||
CREATE DATABASE bob_live_sg;
|
||||
CREATE TABLE bob_live_sg.a (i INT(10));
|
||||
CREATE TABLE bob_live_sg.b (i INT(10));
|
||||
CREATE TABLE bob_live_sg.c (i INT(10));
|
||||
CREATE TABLE bob_live_sg.d (i INT(10));
|
||||
CREATE DATABASE oms_live_sg;
|
||||
CREATE TABLE oms_live_sg.a (i INT(10));
|
||||
CREATE TABLE oms_live_sg.b (i INT(10));
|
||||
CREATE TABLE oms_live_sg.c (i INT(10));
|
||||
CREATE TABLE oms_live_sg.d (i INT(10));
|
||||
CREATE DATABASE bob_live_ph;
|
||||
CREATE TABLE bob_live_ph.a (i INT(10));
|
||||
CREATE TABLE bob_live_ph.b (i INT(10));
|
||||
CREATE TABLE bob_live_ph.c (i INT(10));
|
||||
CREATE TABLE bob_live_ph.d (i INT(10));
|
||||
CREATE DATABASE oms_live_ph;
|
||||
CREATE TABLE oms_live_ph.a (i INT(10));
|
||||
CREATE TABLE oms_live_ph.b (i INT(10));
|
||||
CREATE TABLE oms_live_ph.c (i INT(10));
|
||||
CREATE TABLE oms_live_ph.d (i INT(10));
|
||||
CREATE DATABASE bob_live_id;
|
||||
CREATE TABLE bob_live_id.a (i INT(10));
|
||||
CREATE TABLE bob_live_id.b (i INT(10));
|
||||
CREATE TABLE bob_live_id.c (i INT(10));
|
||||
CREATE TABLE bob_live_id.d (i INT(10));
|
||||
CREATE DATABASE oms_live_id;
|
||||
CREATE TABLE oms_live_id.a (i INT(10));
|
||||
CREATE TABLE oms_live_id.b (i INT(10));
|
||||
CREATE TABLE oms_live_id.c (i INT(10));
|
||||
CREATE TABLE oms_live_id.d (i INT(10));
|
||||
CREATE DATABASE bob_live_hk;
|
||||
CREATE TABLE bob_live_hk.a (i INT(10));
|
||||
CREATE TABLE bob_live_hk.b (i INT(10));
|
||||
CREATE TABLE bob_live_hk.c (i INT(10));
|
||||
CREATE TABLE bob_live_hk.d (i INT(10));
|
||||
CREATE DATABASE oms_live_hk;
|
||||
CREATE TABLE oms_live_hk.a (i INT(10));
|
||||
CREATE TABLE oms_live_hk.b (i INT(10));
|
||||
CREATE TABLE oms_live_hk.c (i INT(10));
|
||||
CREATE TABLE oms_live_hk.d (i INT(10));
|
||||
CREATE DATABASE bob_live_vn;
|
||||
CREATE TABLE bob_live_vn.a (i INT(10));
|
||||
CREATE TABLE bob_live_vn.b (i INT(10));
|
||||
CREATE TABLE bob_live_vn.c (i INT(10));
|
||||
CREATE TABLE bob_live_vn.d (i INT(10));
|
||||
CREATE DATABASE oms_live_vn;
|
||||
CREATE TABLE oms_live_vn.a (i INT(10));
|
||||
CREATE TABLE oms_live_vn.b (i INT(10));
|
||||
CREATE TABLE oms_live_vn.c (i INT(10));
|
||||
CREATE TABLE oms_live_vn.d (i INT(10));
|
||||
CREATE DATABASE bob_live_tw;
|
||||
CREATE TABLE bob_live_tw.a (i INT(10));
|
||||
CREATE TABLE bob_live_tw.b (i INT(10));
|
||||
CREATE TABLE bob_live_tw.c (i INT(10));
|
||||
CREATE TABLE bob_live_tw.d (i INT(10));
|
||||
CREATE DATABASE oms_live_tw;
|
||||
CREATE TABLE oms_live_tw.a (i INT(10));
|
||||
CREATE TABLE oms_live_tw.b (i INT(10));
|
||||
CREATE TABLE oms_live_tw.c (i INT(10));
|
||||
CREATE TABLE oms_live_tw.d (i INT(10));
|
||||
CREATE DATABASE bob_live_my;
|
||||
CREATE TABLE bob_live_my.a (i INT(10));
|
||||
CREATE TABLE bob_live_my.b (i INT(10));
|
||||
CREATE TABLE bob_live_my.c (i INT(10));
|
||||
CREATE TABLE bob_live_my.d (i INT(10));
|
||||
CREATE DATABASE oms_live_my;
|
||||
CREATE TABLE oms_live_my.a (i INT(10));
|
||||
CREATE TABLE oms_live_my.b (i INT(10));
|
||||
CREATE TABLE oms_live_my.c (i INT(10));
|
||||
CREATE TABLE oms_live_my.d (i INT(10));
|
||||
CREATE DATABASE bob_live_th;
|
||||
CREATE TABLE bob_live_th.a (i INT(10));
|
||||
CREATE TABLE bob_live_th.b (i INT(10));
|
||||
CREATE TABLE bob_live_th.c (i INT(10));
|
||||
CREATE TABLE bob_live_th.d (i INT(10));
|
||||
CREATE DATABASE oms_live_th;
|
||||
CREATE TABLE oms_live_th.a (i INT(10));
|
||||
CREATE TABLE oms_live_th.b (i INT(10));
|
||||
CREATE TABLE oms_live_th.c (i INT(10));
|
||||
CREATE TABLE oms_live_th.d (i INT(10));
|
||||
CREATE ROLE a_sg;
|
||||
CREATE ROLE b_sg;
|
||||
CREATE ROLE c_sg;
|
||||
CREATE ROLE d_sg;
|
||||
CREATE ROLE operations_sg;
|
||||
GRANT a_sg TO operations_sg;
|
||||
GRANT b_sg TO operations_sg;
|
||||
GRANT c_sg TO operations_sg;
|
||||
GRANT d_sg TO operations_sg;
|
||||
GRANT SELECT ON bob_live_sg.a TO a_sg;
|
||||
GRANT SELECT ON bob_live_sg.b TO b_sg;
|
||||
GRANT SELECT ON bob_live_sg.c TO c_sg;
|
||||
GRANT SELECT ON bob_live_sg.d TO d_sg;
|
||||
GRANT SELECT ON oms_live_sg.a TO a_sg;
|
||||
GRANT SELECT ON oms_live_sg.b TO b_sg;
|
||||
GRANT SELECT ON oms_live_sg.c TO c_sg;
|
||||
GRANT SELECT ON oms_live_sg.d TO d_sg;
|
||||
CREATE ROLE a_ph;
|
||||
CREATE ROLE b_ph;
|
||||
CREATE ROLE c_ph;
|
||||
CREATE ROLE d_ph;
|
||||
CREATE ROLE operations_ph;
|
||||
GRANT a_ph TO operations_ph;
|
||||
GRANT b_ph TO operations_ph;
|
||||
GRANT c_ph TO operations_ph;
|
||||
GRANT d_ph TO operations_ph;
|
||||
GRANT SELECT ON bob_live_ph.a TO a_ph;
|
||||
GRANT SELECT ON bob_live_ph.b TO b_ph;
|
||||
GRANT SELECT ON bob_live_ph.c TO c_ph;
|
||||
GRANT SELECT ON bob_live_ph.d TO d_ph;
|
||||
GRANT SELECT ON oms_live_ph.a TO a_ph;
|
||||
GRANT SELECT ON oms_live_ph.b TO b_ph;
|
||||
GRANT SELECT ON oms_live_ph.c TO c_ph;
|
||||
GRANT SELECT ON oms_live_ph.d TO d_ph;
|
||||
CREATE ROLE a_id;
|
||||
CREATE ROLE b_id;
|
||||
CREATE ROLE c_id;
|
||||
CREATE ROLE d_id;
|
||||
CREATE ROLE operations_id;
|
||||
GRANT a_id TO operations_id;
|
||||
GRANT b_id TO operations_id;
|
||||
GRANT c_id TO operations_id;
|
||||
GRANT d_id TO operations_id;
|
||||
GRANT SELECT ON bob_live_id.a TO a_id;
|
||||
GRANT SELECT ON bob_live_id.b TO b_id;
|
||||
GRANT SELECT ON bob_live_id.c TO c_id;
|
||||
GRANT SELECT ON bob_live_id.d TO d_id;
|
||||
GRANT SELECT ON oms_live_id.a TO a_id;
|
||||
GRANT SELECT ON oms_live_id.b TO b_id;
|
||||
GRANT SELECT ON oms_live_id.c TO c_id;
|
||||
GRANT SELECT ON oms_live_id.d TO d_id;
|
||||
CREATE ROLE a_hk;
|
||||
CREATE ROLE b_hk;
|
||||
CREATE ROLE c_hk;
|
||||
CREATE ROLE d_hk;
|
||||
CREATE ROLE operations_hk;
|
||||
GRANT a_hk TO operations_hk;
|
||||
GRANT b_hk TO operations_hk;
|
||||
GRANT c_hk TO operations_hk;
|
||||
GRANT d_hk TO operations_hk;
|
||||
GRANT SELECT ON bob_live_hk.a TO a_hk;
|
||||
GRANT SELECT ON bob_live_hk.b TO b_hk;
|
||||
GRANT SELECT ON bob_live_hk.c TO c_hk;
|
||||
GRANT SELECT ON bob_live_hk.d TO d_hk;
|
||||
GRANT SELECT ON oms_live_hk.a TO a_hk;
|
||||
GRANT SELECT ON oms_live_hk.b TO b_hk;
|
||||
GRANT SELECT ON oms_live_hk.c TO c_hk;
|
||||
GRANT SELECT ON oms_live_hk.d TO d_hk;
|
||||
CREATE ROLE a_vn;
|
||||
CREATE ROLE b_vn;
|
||||
CREATE ROLE c_vn;
|
||||
CREATE ROLE d_vn;
|
||||
CREATE ROLE operations_vn;
|
||||
GRANT a_vn TO operations_vn;
|
||||
GRANT b_vn TO operations_vn;
|
||||
GRANT c_vn TO operations_vn;
|
||||
GRANT d_vn TO operations_vn;
|
||||
GRANT SELECT ON bob_live_vn.a TO a_vn;
|
||||
GRANT SELECT ON bob_live_vn.b TO b_vn;
|
||||
GRANT SELECT ON bob_live_vn.c TO c_vn;
|
||||
GRANT SELECT ON bob_live_vn.d TO d_vn;
|
||||
GRANT SELECT ON oms_live_vn.a TO a_vn;
|
||||
GRANT SELECT ON oms_live_vn.b TO b_vn;
|
||||
GRANT SELECT ON oms_live_vn.c TO c_vn;
|
||||
GRANT SELECT ON oms_live_vn.d TO d_vn;
|
||||
CREATE ROLE a_tw;
|
||||
CREATE ROLE b_tw;
|
||||
CREATE ROLE c_tw;
|
||||
CREATE ROLE d_tw;
|
||||
CREATE ROLE operations_tw;
|
||||
GRANT a_tw TO operations_tw;
|
||||
GRANT b_tw TO operations_tw;
|
||||
GRANT c_tw TO operations_tw;
|
||||
GRANT d_tw TO operations_tw;
|
||||
GRANT SELECT ON bob_live_tw.a TO a_tw;
|
||||
GRANT SELECT ON bob_live_tw.b TO b_tw;
|
||||
GRANT SELECT ON bob_live_tw.c TO c_tw;
|
||||
GRANT SELECT ON bob_live_tw.d TO d_tw;
|
||||
GRANT SELECT ON oms_live_tw.a TO a_tw;
|
||||
GRANT SELECT ON oms_live_tw.b TO b_tw;
|
||||
GRANT SELECT ON oms_live_tw.c TO c_tw;
|
||||
GRANT SELECT ON oms_live_tw.d TO d_tw;
|
||||
CREATE ROLE a_my;
|
||||
CREATE ROLE b_my;
|
||||
CREATE ROLE c_my;
|
||||
CREATE ROLE d_my;
|
||||
CREATE ROLE operations_my;
|
||||
GRANT a_my TO operations_my;
|
||||
GRANT b_my TO operations_my;
|
||||
GRANT c_my TO operations_my;
|
||||
GRANT d_my TO operations_my;
|
||||
GRANT SELECT ON bob_live_my.a TO a_my;
|
||||
GRANT SELECT ON bob_live_my.b TO b_my;
|
||||
GRANT SELECT ON bob_live_my.c TO c_my;
|
||||
GRANT SELECT ON bob_live_my.d TO d_my;
|
||||
GRANT SELECT ON oms_live_my.a TO a_my;
|
||||
GRANT SELECT ON oms_live_my.b TO b_my;
|
||||
GRANT SELECT ON oms_live_my.c TO c_my;
|
||||
GRANT SELECT ON oms_live_my.d TO d_my;
|
||||
CREATE ROLE a_th;
|
||||
CREATE ROLE b_th;
|
||||
CREATE ROLE c_th;
|
||||
CREATE ROLE d_th;
|
||||
CREATE ROLE operations_th;
|
||||
GRANT a_th TO operations_th;
|
||||
GRANT b_th TO operations_th;
|
||||
GRANT c_th TO operations_th;
|
||||
GRANT d_th TO operations_th;
|
||||
GRANT SELECT ON bob_live_th.a TO a_th;
|
||||
GRANT SELECT ON bob_live_th.b TO b_th;
|
||||
GRANT SELECT ON bob_live_th.c TO c_th;
|
||||
GRANT SELECT ON bob_live_th.d TO d_th;
|
||||
GRANT SELECT ON oms_live_th.a TO a_th;
|
||||
GRANT SELECT ON oms_live_th.b TO b_th;
|
||||
GRANT SELECT ON oms_live_th.c TO c_th;
|
||||
GRANT SELECT ON oms_live_th.d TO d_th;
|
||||
GRANT operations_sg TO operations_cluster;
|
||||
GRANT operations_ph TO operations_cluster;
|
||||
GRANT operations_id TO operations_cluster;
|
||||
GRANT operations_hk TO operations_cluster;
|
||||
GRANT operations_vn TO operations_cluster;
|
||||
GRANT operations_tw TO operations_cluster;
|
||||
GRANT operations_my TO operations_cluster;
|
||||
GRANT operations_th TO operations_cluster;
|
||||
SHOW DATABASES;
|
||||
Database
|
||||
information_schema
|
||||
test
|
||||
SET ROLE operations_cluster;
|
||||
SHOW DATABASES;
|
||||
Database
|
||||
bob_live_hk
|
||||
bob_live_id
|
||||
bob_live_my
|
||||
bob_live_ph
|
||||
bob_live_sg
|
||||
bob_live_th
|
||||
bob_live_tw
|
||||
bob_live_vn
|
||||
information_schema
|
||||
oms_live_hk
|
||||
oms_live_id
|
||||
oms_live_my
|
||||
oms_live_ph
|
||||
oms_live_sg
|
||||
oms_live_th
|
||||
oms_live_tw
|
||||
oms_live_vn
|
||||
test
|
||||
SELECT COUNT(1) FROM oms_live_sg.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_sg.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_sg.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_sg.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.d;
|
||||
COUNT(1)
|
||||
0
|
||||
FLUSH PRIVILEGES;
|
||||
SHOW DATABASES;
|
||||
Database
|
||||
information_schema
|
||||
test
|
||||
SET ROLE operations_cluster;
|
||||
SHOW DATABASES;
|
||||
Database
|
||||
bob_live_hk
|
||||
bob_live_id
|
||||
bob_live_my
|
||||
bob_live_ph
|
||||
bob_live_sg
|
||||
bob_live_th
|
||||
bob_live_tw
|
||||
bob_live_vn
|
||||
information_schema
|
||||
oms_live_hk
|
||||
oms_live_id
|
||||
oms_live_my
|
||||
oms_live_ph
|
||||
oms_live_sg
|
||||
oms_live_th
|
||||
oms_live_tw
|
||||
oms_live_vn
|
||||
test
|
||||
SELECT COUNT(1) FROM oms_live_sg.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_sg.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_sg.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_sg.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_ph.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_id.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_hk.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_vn.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_tw.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_my.d;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.a;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.b;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.c;
|
||||
COUNT(1)
|
||||
0
|
||||
SELECT COUNT(1) FROM oms_live_th.d;
|
||||
COUNT(1)
|
||||
0
|
||||
DROP DATABASE bob_live_sg;
|
||||
DROP DATABASE oms_live_sg;
|
||||
DROP DATABASE bob_live_ph;
|
||||
DROP DATABASE oms_live_ph;
|
||||
DROP DATABASE bob_live_id;
|
||||
DROP DATABASE oms_live_id;
|
||||
DROP DATABASE bob_live_hk;
|
||||
DROP DATABASE oms_live_hk;
|
||||
DROP DATABASE bob_live_vn;
|
||||
DROP DATABASE oms_live_vn;
|
||||
DROP DATABASE bob_live_tw;
|
||||
DROP DATABASE oms_live_tw;
|
||||
DROP DATABASE bob_live_my;
|
||||
DROP DATABASE oms_live_my;
|
||||
DROP DATABASE bob_live_th;
|
||||
DROP DATABASE oms_live_th;
|
||||
DROP ROLE operations_sg;
|
||||
DROP ROLE a_sg;
|
||||
DROP ROLE b_sg;
|
||||
DROP ROLE c_sg;
|
||||
DROP ROLE d_sg;
|
||||
DROP ROLE operations_ph;
|
||||
DROP ROLE a_ph;
|
||||
DROP ROLE b_ph;
|
||||
DROP ROLE c_ph;
|
||||
DROP ROLE d_ph;
|
||||
DROP ROLE operations_id;
|
||||
DROP ROLE a_id;
|
||||
DROP ROLE b_id;
|
||||
DROP ROLE c_id;
|
||||
DROP ROLE d_id;
|
||||
DROP ROLE operations_hk;
|
||||
DROP ROLE a_hk;
|
||||
DROP ROLE b_hk;
|
||||
DROP ROLE c_hk;
|
||||
DROP ROLE d_hk;
|
||||
DROP ROLE operations_vn;
|
||||
DROP ROLE a_vn;
|
||||
DROP ROLE b_vn;
|
||||
DROP ROLE c_vn;
|
||||
DROP ROLE d_vn;
|
||||
DROP ROLE operations_tw;
|
||||
DROP ROLE a_tw;
|
||||
DROP ROLE b_tw;
|
||||
DROP ROLE c_tw;
|
||||
DROP ROLE d_tw;
|
||||
DROP ROLE operations_my;
|
||||
DROP ROLE a_my;
|
||||
DROP ROLE b_my;
|
||||
DROP ROLE c_my;
|
||||
DROP ROLE d_my;
|
||||
DROP ROLE operations_th;
|
||||
DROP ROLE a_th;
|
||||
DROP ROLE b_th;
|
||||
DROP ROLE c_th;
|
||||
DROP ROLE d_th;
|
||||
DROP USER u;
|
||||
DROP ROLE operations_cluster;
|
379
mysql-test/suite/roles/flush_roles-12366.test
Normal file
379
mysql-test/suite/roles/flush_roles-12366.test
Normal file
@ -0,0 +1,379 @@
|
||||
--source include/not_embedded.inc
|
||||
--echo #
|
||||
--echo # MDEV-12366: FLUSH PRIVILEGES can break hierarchy of roles
|
||||
--echo #
|
||||
--echo # This testcase contains a user, who is granted a master role
|
||||
--echo # operations_cluster. operations_cluster is granted 8 different roles
|
||||
--echo # who in turn each have 4 different roles granted to them.
|
||||
--echo #
|
||||
--echo # Only the leaf roles contain privileges to access databases.
|
||||
--echo # Make sure the user has access to all databases if the master role
|
||||
--echo # is granted to him.
|
||||
--echo #
|
||||
CREATE USER u;
|
||||
CREATE ROLE operations_cluster;
|
||||
GRANT operations_cluster TO u;
|
||||
CREATE DATABASE bob_live_sg;
|
||||
CREATE TABLE bob_live_sg.a (i INT(10));
|
||||
CREATE TABLE bob_live_sg.b (i INT(10));
|
||||
CREATE TABLE bob_live_sg.c (i INT(10));
|
||||
CREATE TABLE bob_live_sg.d (i INT(10));
|
||||
CREATE DATABASE oms_live_sg;
|
||||
CREATE TABLE oms_live_sg.a (i INT(10));
|
||||
CREATE TABLE oms_live_sg.b (i INT(10));
|
||||
CREATE TABLE oms_live_sg.c (i INT(10));
|
||||
CREATE TABLE oms_live_sg.d (i INT(10));
|
||||
CREATE DATABASE bob_live_ph;
|
||||
CREATE TABLE bob_live_ph.a (i INT(10));
|
||||
CREATE TABLE bob_live_ph.b (i INT(10));
|
||||
CREATE TABLE bob_live_ph.c (i INT(10));
|
||||
CREATE TABLE bob_live_ph.d (i INT(10));
|
||||
CREATE DATABASE oms_live_ph;
|
||||
CREATE TABLE oms_live_ph.a (i INT(10));
|
||||
CREATE TABLE oms_live_ph.b (i INT(10));
|
||||
CREATE TABLE oms_live_ph.c (i INT(10));
|
||||
CREATE TABLE oms_live_ph.d (i INT(10));
|
||||
CREATE DATABASE bob_live_id;
|
||||
CREATE TABLE bob_live_id.a (i INT(10));
|
||||
CREATE TABLE bob_live_id.b (i INT(10));
|
||||
CREATE TABLE bob_live_id.c (i INT(10));
|
||||
CREATE TABLE bob_live_id.d (i INT(10));
|
||||
CREATE DATABASE oms_live_id;
|
||||
CREATE TABLE oms_live_id.a (i INT(10));
|
||||
CREATE TABLE oms_live_id.b (i INT(10));
|
||||
CREATE TABLE oms_live_id.c (i INT(10));
|
||||
CREATE TABLE oms_live_id.d (i INT(10));
|
||||
CREATE DATABASE bob_live_hk;
|
||||
CREATE TABLE bob_live_hk.a (i INT(10));
|
||||
CREATE TABLE bob_live_hk.b (i INT(10));
|
||||
CREATE TABLE bob_live_hk.c (i INT(10));
|
||||
CREATE TABLE bob_live_hk.d (i INT(10));
|
||||
CREATE DATABASE oms_live_hk;
|
||||
CREATE TABLE oms_live_hk.a (i INT(10));
|
||||
CREATE TABLE oms_live_hk.b (i INT(10));
|
||||
CREATE TABLE oms_live_hk.c (i INT(10));
|
||||
CREATE TABLE oms_live_hk.d (i INT(10));
|
||||
CREATE DATABASE bob_live_vn;
|
||||
CREATE TABLE bob_live_vn.a (i INT(10));
|
||||
CREATE TABLE bob_live_vn.b (i INT(10));
|
||||
CREATE TABLE bob_live_vn.c (i INT(10));
|
||||
CREATE TABLE bob_live_vn.d (i INT(10));
|
||||
CREATE DATABASE oms_live_vn;
|
||||
CREATE TABLE oms_live_vn.a (i INT(10));
|
||||
CREATE TABLE oms_live_vn.b (i INT(10));
|
||||
CREATE TABLE oms_live_vn.c (i INT(10));
|
||||
CREATE TABLE oms_live_vn.d (i INT(10));
|
||||
CREATE DATABASE bob_live_tw;
|
||||
CREATE TABLE bob_live_tw.a (i INT(10));
|
||||
CREATE TABLE bob_live_tw.b (i INT(10));
|
||||
CREATE TABLE bob_live_tw.c (i INT(10));
|
||||
CREATE TABLE bob_live_tw.d (i INT(10));
|
||||
CREATE DATABASE oms_live_tw;
|
||||
CREATE TABLE oms_live_tw.a (i INT(10));
|
||||
CREATE TABLE oms_live_tw.b (i INT(10));
|
||||
CREATE TABLE oms_live_tw.c (i INT(10));
|
||||
CREATE TABLE oms_live_tw.d (i INT(10));
|
||||
CREATE DATABASE bob_live_my;
|
||||
CREATE TABLE bob_live_my.a (i INT(10));
|
||||
CREATE TABLE bob_live_my.b (i INT(10));
|
||||
CREATE TABLE bob_live_my.c (i INT(10));
|
||||
CREATE TABLE bob_live_my.d (i INT(10));
|
||||
CREATE DATABASE oms_live_my;
|
||||
CREATE TABLE oms_live_my.a (i INT(10));
|
||||
CREATE TABLE oms_live_my.b (i INT(10));
|
||||
CREATE TABLE oms_live_my.c (i INT(10));
|
||||
CREATE TABLE oms_live_my.d (i INT(10));
|
||||
CREATE DATABASE bob_live_th;
|
||||
CREATE TABLE bob_live_th.a (i INT(10));
|
||||
CREATE TABLE bob_live_th.b (i INT(10));
|
||||
CREATE TABLE bob_live_th.c (i INT(10));
|
||||
CREATE TABLE bob_live_th.d (i INT(10));
|
||||
CREATE DATABASE oms_live_th;
|
||||
CREATE TABLE oms_live_th.a (i INT(10));
|
||||
CREATE TABLE oms_live_th.b (i INT(10));
|
||||
CREATE TABLE oms_live_th.c (i INT(10));
|
||||
CREATE TABLE oms_live_th.d (i INT(10));
|
||||
CREATE ROLE a_sg;
|
||||
CREATE ROLE b_sg;
|
||||
CREATE ROLE c_sg;
|
||||
CREATE ROLE d_sg;
|
||||
CREATE ROLE operations_sg;
|
||||
GRANT a_sg TO operations_sg;
|
||||
GRANT b_sg TO operations_sg;
|
||||
GRANT c_sg TO operations_sg;
|
||||
GRANT d_sg TO operations_sg;
|
||||
GRANT SELECT ON bob_live_sg.a TO a_sg;
|
||||
GRANT SELECT ON bob_live_sg.b TO b_sg;
|
||||
GRANT SELECT ON bob_live_sg.c TO c_sg;
|
||||
GRANT SELECT ON bob_live_sg.d TO d_sg;
|
||||
GRANT SELECT ON oms_live_sg.a TO a_sg;
|
||||
GRANT SELECT ON oms_live_sg.b TO b_sg;
|
||||
GRANT SELECT ON oms_live_sg.c TO c_sg;
|
||||
GRANT SELECT ON oms_live_sg.d TO d_sg;
|
||||
CREATE ROLE a_ph;
|
||||
CREATE ROLE b_ph;
|
||||
CREATE ROLE c_ph;
|
||||
CREATE ROLE d_ph;
|
||||
CREATE ROLE operations_ph;
|
||||
GRANT a_ph TO operations_ph;
|
||||
GRANT b_ph TO operations_ph;
|
||||
GRANT c_ph TO operations_ph;
|
||||
GRANT d_ph TO operations_ph;
|
||||
GRANT SELECT ON bob_live_ph.a TO a_ph;
|
||||
GRANT SELECT ON bob_live_ph.b TO b_ph;
|
||||
GRANT SELECT ON bob_live_ph.c TO c_ph;
|
||||
GRANT SELECT ON bob_live_ph.d TO d_ph;
|
||||
GRANT SELECT ON oms_live_ph.a TO a_ph;
|
||||
GRANT SELECT ON oms_live_ph.b TO b_ph;
|
||||
GRANT SELECT ON oms_live_ph.c TO c_ph;
|
||||
GRANT SELECT ON oms_live_ph.d TO d_ph;
|
||||
CREATE ROLE a_id;
|
||||
CREATE ROLE b_id;
|
||||
CREATE ROLE c_id;
|
||||
CREATE ROLE d_id;
|
||||
CREATE ROLE operations_id;
|
||||
GRANT a_id TO operations_id;
|
||||
GRANT b_id TO operations_id;
|
||||
GRANT c_id TO operations_id;
|
||||
GRANT d_id TO operations_id;
|
||||
GRANT SELECT ON bob_live_id.a TO a_id;
|
||||
GRANT SELECT ON bob_live_id.b TO b_id;
|
||||
GRANT SELECT ON bob_live_id.c TO c_id;
|
||||
GRANT SELECT ON bob_live_id.d TO d_id;
|
||||
GRANT SELECT ON oms_live_id.a TO a_id;
|
||||
GRANT SELECT ON oms_live_id.b TO b_id;
|
||||
GRANT SELECT ON oms_live_id.c TO c_id;
|
||||
GRANT SELECT ON oms_live_id.d TO d_id;
|
||||
CREATE ROLE a_hk;
|
||||
CREATE ROLE b_hk;
|
||||
CREATE ROLE c_hk;
|
||||
CREATE ROLE d_hk;
|
||||
CREATE ROLE operations_hk;
|
||||
GRANT a_hk TO operations_hk;
|
||||
GRANT b_hk TO operations_hk;
|
||||
GRANT c_hk TO operations_hk;
|
||||
GRANT d_hk TO operations_hk;
|
||||
GRANT SELECT ON bob_live_hk.a TO a_hk;
|
||||
GRANT SELECT ON bob_live_hk.b TO b_hk;
|
||||
GRANT SELECT ON bob_live_hk.c TO c_hk;
|
||||
GRANT SELECT ON bob_live_hk.d TO d_hk;
|
||||
GRANT SELECT ON oms_live_hk.a TO a_hk;
|
||||
GRANT SELECT ON oms_live_hk.b TO b_hk;
|
||||
GRANT SELECT ON oms_live_hk.c TO c_hk;
|
||||
GRANT SELECT ON oms_live_hk.d TO d_hk;
|
||||
CREATE ROLE a_vn;
|
||||
CREATE ROLE b_vn;
|
||||
CREATE ROLE c_vn;
|
||||
CREATE ROLE d_vn;
|
||||
CREATE ROLE operations_vn;
|
||||
GRANT a_vn TO operations_vn;
|
||||
GRANT b_vn TO operations_vn;
|
||||
GRANT c_vn TO operations_vn;
|
||||
GRANT d_vn TO operations_vn;
|
||||
GRANT SELECT ON bob_live_vn.a TO a_vn;
|
||||
GRANT SELECT ON bob_live_vn.b TO b_vn;
|
||||
GRANT SELECT ON bob_live_vn.c TO c_vn;
|
||||
GRANT SELECT ON bob_live_vn.d TO d_vn;
|
||||
GRANT SELECT ON oms_live_vn.a TO a_vn;
|
||||
GRANT SELECT ON oms_live_vn.b TO b_vn;
|
||||
GRANT SELECT ON oms_live_vn.c TO c_vn;
|
||||
GRANT SELECT ON oms_live_vn.d TO d_vn;
|
||||
CREATE ROLE a_tw;
|
||||
CREATE ROLE b_tw;
|
||||
CREATE ROLE c_tw;
|
||||
CREATE ROLE d_tw;
|
||||
CREATE ROLE operations_tw;
|
||||
GRANT a_tw TO operations_tw;
|
||||
GRANT b_tw TO operations_tw;
|
||||
GRANT c_tw TO operations_tw;
|
||||
GRANT d_tw TO operations_tw;
|
||||
GRANT SELECT ON bob_live_tw.a TO a_tw;
|
||||
GRANT SELECT ON bob_live_tw.b TO b_tw;
|
||||
GRANT SELECT ON bob_live_tw.c TO c_tw;
|
||||
GRANT SELECT ON bob_live_tw.d TO d_tw;
|
||||
GRANT SELECT ON oms_live_tw.a TO a_tw;
|
||||
GRANT SELECT ON oms_live_tw.b TO b_tw;
|
||||
GRANT SELECT ON oms_live_tw.c TO c_tw;
|
||||
GRANT SELECT ON oms_live_tw.d TO d_tw;
|
||||
CREATE ROLE a_my;
|
||||
CREATE ROLE b_my;
|
||||
CREATE ROLE c_my;
|
||||
CREATE ROLE d_my;
|
||||
CREATE ROLE operations_my;
|
||||
GRANT a_my TO operations_my;
|
||||
GRANT b_my TO operations_my;
|
||||
GRANT c_my TO operations_my;
|
||||
GRANT d_my TO operations_my;
|
||||
GRANT SELECT ON bob_live_my.a TO a_my;
|
||||
GRANT SELECT ON bob_live_my.b TO b_my;
|
||||
GRANT SELECT ON bob_live_my.c TO c_my;
|
||||
GRANT SELECT ON bob_live_my.d TO d_my;
|
||||
GRANT SELECT ON oms_live_my.a TO a_my;
|
||||
GRANT SELECT ON oms_live_my.b TO b_my;
|
||||
GRANT SELECT ON oms_live_my.c TO c_my;
|
||||
GRANT SELECT ON oms_live_my.d TO d_my;
|
||||
CREATE ROLE a_th;
|
||||
CREATE ROLE b_th;
|
||||
CREATE ROLE c_th;
|
||||
CREATE ROLE d_th;
|
||||
CREATE ROLE operations_th;
|
||||
GRANT a_th TO operations_th;
|
||||
GRANT b_th TO operations_th;
|
||||
GRANT c_th TO operations_th;
|
||||
GRANT d_th TO operations_th;
|
||||
GRANT SELECT ON bob_live_th.a TO a_th;
|
||||
GRANT SELECT ON bob_live_th.b TO b_th;
|
||||
GRANT SELECT ON bob_live_th.c TO c_th;
|
||||
GRANT SELECT ON bob_live_th.d TO d_th;
|
||||
GRANT SELECT ON oms_live_th.a TO a_th;
|
||||
GRANT SELECT ON oms_live_th.b TO b_th;
|
||||
GRANT SELECT ON oms_live_th.c TO c_th;
|
||||
GRANT SELECT ON oms_live_th.d TO d_th;
|
||||
GRANT operations_sg TO operations_cluster;
|
||||
GRANT operations_ph TO operations_cluster;
|
||||
GRANT operations_id TO operations_cluster;
|
||||
GRANT operations_hk TO operations_cluster;
|
||||
GRANT operations_vn TO operations_cluster;
|
||||
GRANT operations_tw TO operations_cluster;
|
||||
GRANT operations_my TO operations_cluster;
|
||||
GRANT operations_th TO operations_cluster;
|
||||
|
||||
connect(con1,localhost,u,,);
|
||||
SHOW DATABASES;
|
||||
SET ROLE operations_cluster;
|
||||
SHOW DATABASES;
|
||||
SELECT COUNT(1) FROM oms_live_sg.a;
|
||||
SELECT COUNT(1) FROM oms_live_sg.b;
|
||||
SELECT COUNT(1) FROM oms_live_sg.c;
|
||||
SELECT COUNT(1) FROM oms_live_sg.d;
|
||||
SELECT COUNT(1) FROM oms_live_ph.a;
|
||||
SELECT COUNT(1) FROM oms_live_ph.b;
|
||||
SELECT COUNT(1) FROM oms_live_ph.c;
|
||||
SELECT COUNT(1) FROM oms_live_ph.d;
|
||||
SELECT COUNT(1) FROM oms_live_id.a;
|
||||
SELECT COUNT(1) FROM oms_live_id.b;
|
||||
SELECT COUNT(1) FROM oms_live_id.c;
|
||||
SELECT COUNT(1) FROM oms_live_id.d;
|
||||
SELECT COUNT(1) FROM oms_live_hk.a;
|
||||
SELECT COUNT(1) FROM oms_live_hk.b;
|
||||
SELECT COUNT(1) FROM oms_live_hk.c;
|
||||
SELECT COUNT(1) FROM oms_live_hk.d;
|
||||
SELECT COUNT(1) FROM oms_live_vn.a;
|
||||
SELECT COUNT(1) FROM oms_live_vn.b;
|
||||
SELECT COUNT(1) FROM oms_live_vn.c;
|
||||
SELECT COUNT(1) FROM oms_live_vn.d;
|
||||
SELECT COUNT(1) FROM oms_live_tw.a;
|
||||
SELECT COUNT(1) FROM oms_live_tw.b;
|
||||
SELECT COUNT(1) FROM oms_live_tw.c;
|
||||
SELECT COUNT(1) FROM oms_live_tw.d;
|
||||
SELECT COUNT(1) FROM oms_live_my.a;
|
||||
SELECT COUNT(1) FROM oms_live_my.b;
|
||||
SELECT COUNT(1) FROM oms_live_my.c;
|
||||
SELECT COUNT(1) FROM oms_live_my.d;
|
||||
SELECT COUNT(1) FROM oms_live_th.a;
|
||||
SELECT COUNT(1) FROM oms_live_th.b;
|
||||
SELECT COUNT(1) FROM oms_live_th.c;
|
||||
SELECT COUNT(1) FROM oms_live_th.d;
|
||||
|
||||
|
||||
connect(con2,localhost,root,,);
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
connect(con3,localhost,u,,);
|
||||
SHOW DATABASES;
|
||||
SET ROLE operations_cluster;
|
||||
SHOW DATABASES;
|
||||
SELECT COUNT(1) FROM oms_live_sg.a;
|
||||
SELECT COUNT(1) FROM oms_live_sg.b;
|
||||
SELECT COUNT(1) FROM oms_live_sg.c;
|
||||
SELECT COUNT(1) FROM oms_live_sg.d;
|
||||
SELECT COUNT(1) FROM oms_live_ph.a;
|
||||
SELECT COUNT(1) FROM oms_live_ph.b;
|
||||
SELECT COUNT(1) FROM oms_live_ph.c;
|
||||
SELECT COUNT(1) FROM oms_live_ph.d;
|
||||
SELECT COUNT(1) FROM oms_live_id.a;
|
||||
SELECT COUNT(1) FROM oms_live_id.b;
|
||||
SELECT COUNT(1) FROM oms_live_id.c;
|
||||
SELECT COUNT(1) FROM oms_live_id.d;
|
||||
SELECT COUNT(1) FROM oms_live_hk.a;
|
||||
SELECT COUNT(1) FROM oms_live_hk.b;
|
||||
SELECT COUNT(1) FROM oms_live_hk.c;
|
||||
SELECT COUNT(1) FROM oms_live_hk.d;
|
||||
SELECT COUNT(1) FROM oms_live_vn.a;
|
||||
SELECT COUNT(1) FROM oms_live_vn.b;
|
||||
SELECT COUNT(1) FROM oms_live_vn.c;
|
||||
SELECT COUNT(1) FROM oms_live_vn.d;
|
||||
SELECT COUNT(1) FROM oms_live_tw.a;
|
||||
SELECT COUNT(1) FROM oms_live_tw.b;
|
||||
SELECT COUNT(1) FROM oms_live_tw.c;
|
||||
SELECT COUNT(1) FROM oms_live_tw.d;
|
||||
SELECT COUNT(1) FROM oms_live_my.a;
|
||||
SELECT COUNT(1) FROM oms_live_my.b;
|
||||
SELECT COUNT(1) FROM oms_live_my.c;
|
||||
SELECT COUNT(1) FROM oms_live_my.d;
|
||||
SELECT COUNT(1) FROM oms_live_th.a;
|
||||
SELECT COUNT(1) FROM oms_live_th.b;
|
||||
SELECT COUNT(1) FROM oms_live_th.c;
|
||||
SELECT COUNT(1) FROM oms_live_th.d;
|
||||
|
||||
|
||||
connect(con4,localhost,root,,);
|
||||
|
||||
DROP DATABASE bob_live_sg;
|
||||
DROP DATABASE oms_live_sg;
|
||||
DROP DATABASE bob_live_ph;
|
||||
DROP DATABASE oms_live_ph;
|
||||
DROP DATABASE bob_live_id;
|
||||
DROP DATABASE oms_live_id;
|
||||
DROP DATABASE bob_live_hk;
|
||||
DROP DATABASE oms_live_hk;
|
||||
DROP DATABASE bob_live_vn;
|
||||
DROP DATABASE oms_live_vn;
|
||||
DROP DATABASE bob_live_tw;
|
||||
DROP DATABASE oms_live_tw;
|
||||
DROP DATABASE bob_live_my;
|
||||
DROP DATABASE oms_live_my;
|
||||
DROP DATABASE bob_live_th;
|
||||
DROP DATABASE oms_live_th;
|
||||
DROP ROLE operations_sg;
|
||||
DROP ROLE a_sg;
|
||||
DROP ROLE b_sg;
|
||||
DROP ROLE c_sg;
|
||||
DROP ROLE d_sg;
|
||||
DROP ROLE operations_ph;
|
||||
DROP ROLE a_ph;
|
||||
DROP ROLE b_ph;
|
||||
DROP ROLE c_ph;
|
||||
DROP ROLE d_ph;
|
||||
DROP ROLE operations_id;
|
||||
DROP ROLE a_id;
|
||||
DROP ROLE b_id;
|
||||
DROP ROLE c_id;
|
||||
DROP ROLE d_id;
|
||||
DROP ROLE operations_hk;
|
||||
DROP ROLE a_hk;
|
||||
DROP ROLE b_hk;
|
||||
DROP ROLE c_hk;
|
||||
DROP ROLE d_hk;
|
||||
DROP ROLE operations_vn;
|
||||
DROP ROLE a_vn;
|
||||
DROP ROLE b_vn;
|
||||
DROP ROLE c_vn;
|
||||
DROP ROLE d_vn;
|
||||
DROP ROLE operations_tw;
|
||||
DROP ROLE a_tw;
|
||||
DROP ROLE b_tw;
|
||||
DROP ROLE c_tw;
|
||||
DROP ROLE d_tw;
|
||||
DROP ROLE operations_my;
|
||||
DROP ROLE a_my;
|
||||
DROP ROLE b_my;
|
||||
DROP ROLE c_my;
|
||||
DROP ROLE d_my;
|
||||
DROP ROLE operations_th;
|
||||
DROP ROLE a_th;
|
||||
DROP ROLE b_th;
|
||||
DROP ROLE c_th;
|
||||
DROP ROLE d_th;
|
||||
DROP USER u;
|
||||
DROP ROLE operations_cluster;
|
50
mysql-test/suite/roles/set_role-13655.result
Normal file
50
mysql-test/suite/roles/set_role-13655.result
Normal file
@ -0,0 +1,50 @@
|
||||
#
|
||||
# MDEV-13655: SET ROLE does not properly grant privileges.
|
||||
#
|
||||
# We must test that if aditional db privileges get granted to a role
|
||||
# which previously inherited privileges from another granted role
|
||||
# keep the internal memory structures intact.
|
||||
#
|
||||
create role simple;
|
||||
#
|
||||
# First we create an entry with privileges for databases for the simple role.
|
||||
#
|
||||
grant select, insert, update, delete, lock tables, execute on t.* to simple;
|
||||
create role admin;
|
||||
#
|
||||
# Now we grant the simple role to admin. This means that db privileges
|
||||
# should propagate to admin.
|
||||
#
|
||||
grant simple to admin;
|
||||
show grants for admin;
|
||||
Grants for admin
|
||||
GRANT simple TO 'admin'
|
||||
GRANT USAGE ON *.* TO 'admin'
|
||||
GRANT USAGE ON *.* TO 'simple'
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE ON `t`.* TO 'simple'
|
||||
#
|
||||
# Finally, we give the admin all the available privileges for the db.
|
||||
#
|
||||
grant all on t.* to admin;
|
||||
#
|
||||
# Create a user to test out the new roles;
|
||||
#
|
||||
create user foo;
|
||||
grant admin to foo;
|
||||
create database t;
|
||||
ERROR 42000: Access denied for user 'foo'@'%' to database 't'
|
||||
set role admin;
|
||||
show grants;
|
||||
Grants for foo@%
|
||||
GRANT admin TO 'foo'@'%'
|
||||
GRANT USAGE ON *.* TO 'foo'@'%'
|
||||
GRANT simple TO 'admin'
|
||||
GRANT USAGE ON *.* TO 'admin'
|
||||
GRANT ALL PRIVILEGES ON `t`.* TO 'admin'
|
||||
GRANT USAGE ON *.* TO 'simple'
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE ON `t`.* TO 'simple'
|
||||
create database t;
|
||||
drop database t;
|
||||
drop role simple;
|
||||
drop role admin;
|
||||
drop user foo;
|
49
mysql-test/suite/roles/set_role-13655.test
Normal file
49
mysql-test/suite/roles/set_role-13655.test
Normal file
@ -0,0 +1,49 @@
|
||||
source include/not_embedded.inc;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-13655: SET ROLE does not properly grant privileges.
|
||||
--echo #
|
||||
--echo # We must test that if aditional db privileges get granted to a role
|
||||
--echo # which previously inherited privileges from another granted role
|
||||
--echo # keep the internal memory structures intact.
|
||||
--echo #
|
||||
|
||||
create role simple;
|
||||
|
||||
--echo #
|
||||
--echo # First we create an entry with privileges for databases for the simple role.
|
||||
--echo #
|
||||
grant select, insert, update, delete, lock tables, execute on t.* to simple;
|
||||
create role admin;
|
||||
|
||||
--echo #
|
||||
--echo # Now we grant the simple role to admin. This means that db privileges
|
||||
--echo # should propagate to admin.
|
||||
--echo #
|
||||
grant simple to admin;
|
||||
show grants for admin;
|
||||
|
||||
--echo #
|
||||
--echo # Finally, we give the admin all the available privileges for the db.
|
||||
--echo #
|
||||
grant all on t.* to admin;
|
||||
|
||||
--echo #
|
||||
--echo # Create a user to test out the new roles;
|
||||
--echo #
|
||||
create user foo;
|
||||
grant admin to foo;
|
||||
|
||||
connect (foo,localhost,foo,,,,,);
|
||||
--error ER_DBACCESS_DENIED_ERROR
|
||||
create database t;
|
||||
set role admin;
|
||||
show grants;
|
||||
create database t;
|
||||
drop database t;
|
||||
|
||||
connection default;
|
||||
|
||||
drop role simple;
|
||||
drop role admin;
|
||||
drop user foo;
|
@ -136,18 +136,14 @@ SELECT * FROM t1 WHERE FIND_IN_SET(NULL, NULL) IS UNKNOWN;
|
||||
|
||||
--echo
|
||||
DROP TABLE t1;
|
||||
--echo #
|
||||
--echo # Start of 5.3 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-4512 Valgrind warnings in my_long10_to_str_8bit on INTERVAL and DATE_ADD with incorrect types
|
||||
--echo # MDEV-14596 Crash in INTERVAL(ROW(..),ROW(..))
|
||||
--echo #
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (10),(11);
|
||||
SELECT INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 ) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.3 tests
|
||||
--echo #
|
||||
--error ER_OPERAND_COLUMNS
|
||||
SELECT INTERVAL(ROW(1,1),ROW(1,2));
|
||||
--error ER_OPERAND_COLUMNS
|
||||
SELECT INTERVAL(1,ROW(1,2));
|
||||
--error ER_OPERAND_COLUMNS
|
||||
SELECT INTERVAL(ROW(1,2),1);
|
||||
|
@ -1764,6 +1764,32 @@ create table t2 (c1 int, c2 int);
|
||||
select t1.c1 as c1, t2.c2 as c1 from t1, t2 where t1.c1 < 20 and t2.c2 > 5 group by t1.c1, t2.c2 having t1.c1 < 3;
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# MDEV-12350: Heap corruption, overrun buffer, ASAN errors, server crash in my_fill_8bit / filesort
|
||||
#
|
||||
|
||||
SET @old_sort_buff_size = @@sort_buffer_size;
|
||||
SET @@sort_buffer_size=256*1024;
|
||||
CREATE TABLE t1 (c INT) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES
|
||||
(2011),(1977),(1982),(2027),(2023),(NULL),(NULL),(2004),(1974),(2032),
|
||||
(1993),(NULL),(1995),(2034),(NULL),(2009),(1900),(NULL),(2025),(1900),
|
||||
(2033),(1900),(2012),(NULL),(2009),(1992),(1974),(1974),(2012),(2028),
|
||||
(2007),(2012),(1900),(1983),(1900),(2010),(1987),(1994),(1981),(2032),
|
||||
(2010),(1989),(2014),(1900),(1900),(1976),(1978),(2007),(2030),(NULL),
|
||||
(2002),(1997),(1900),(NULL),(2000),(2027),(1975),(2026),(1975),(2026),
|
||||
(2029),(1977),(1900),(1900),(2031),(1993),(1986),(2012),(1979),(2013),
|
||||
(1994),(2014),(2025),(2006),(1971),(1974),(2021),(2011),(NULL),(1991),
|
||||
(2001),(1977),(2023),(2012),(1900),(1978),(1998),(NULL),(1988),(1999),
|
||||
(2017),(2008),(1976),(1900),(2005),(2030),(2023),(1900),(1978),(1990),
|
||||
(1978),(1987),(2030),(1900),(2034),(2006),(2015),(2001),(2019),(2024),
|
||||
(2030),(1989),(1997),(2007),(2023),(1994),(1971),(2011),(2011),(2015),
|
||||
(1984),(1978),(1979),(1989),(2008),(2030);
|
||||
|
||||
SELECT ExtractValue('<a></a>','/a') AS f1, SPACE(c) AS f2 FROM t1 GROUP BY f1, f2 WITH ROLLUP;
|
||||
SET @@sort_buffer_size = @old_sort_buff_size;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# End of MariaDB 5.5 tests
|
||||
#
|
||||
|
@ -728,6 +728,23 @@ HAVING UPPER(`column_1`) LIKE '8%';
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # mdev-14368: grouping query with alias for aggregate function in HAVING
|
||||
--echo # when sql_mode = 'ONLY_FULL_GROUP_BY'
|
||||
|
||||
|
||||
set @save_sql_mode= @@sql_mode;
|
||||
set sql_mode = 'ONLY_FULL_GROUP_BY';
|
||||
|
||||
create table t1(a int);
|
||||
insert t1 values (4),(1),(2),(1), (3),(4);
|
||||
|
||||
SELECT a, COUNT(a) as ct FROM t1 GROUP BY a HAVING ct>0;
|
||||
|
||||
set sql_mode=@save_sql_mode;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug mdev-5160: two-way join with HAVING over the second table
|
||||
--echo #
|
||||
|
@ -1962,6 +1962,20 @@ DROP FUNCTION f1;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (b1 BIT NOT NULL);
|
||||
INSERT INTO t1 VALUES (0),(1);
|
||||
|
||||
CREATE TABLE t2 (b2 BIT NOT NULL);
|
||||
INSERT INTO t2 VALUES (0),(1);
|
||||
|
||||
SET SESSION JOIN_CACHE_LEVEL = 3;
|
||||
SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo # end of 5.5 tests
|
||||
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
@ -5591,6 +5591,18 @@ PREPARE stmt FROM 'REPLACE INTO v2 SELECT a FROM t3';
|
||||
drop view v1,v2;
|
||||
drop table t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-14619: VIEW and GROUP_CONCAT
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (str text);
|
||||
INSERT INTO t1 VALUES ("My"),("SQL");
|
||||
CREATE VIEW v1 AS SELECT GROUP_CONCAT(str SEPARATOR '\\') FROM t1;
|
||||
SELECT * FROM v1;
|
||||
SHOW CREATE VIEW v1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- End of 5.5 tests.
|
||||
--echo # -----------------------------------------------------------------
|
||||
|
@ -989,8 +989,8 @@ if expr "${-}" : '.*x' > /dev/null
|
||||
then
|
||||
:
|
||||
else
|
||||
exec 1>&-
|
||||
exec 2>&-
|
||||
exec 1>/dev/null
|
||||
exec 2>/dev/null
|
||||
fi
|
||||
|
||||
# maximum number of wsrep restarts
|
||||
|
@ -4738,7 +4738,14 @@ longlong Field_double::val_int_from_real(bool want_unsigned_result)
|
||||
float8get(j,ptr);
|
||||
|
||||
res= double_to_longlong(j, want_unsigned_result, &error);
|
||||
if (error)
|
||||
/*
|
||||
Note, val_uint() is currently used for auto_increment purposes only,
|
||||
and we want to suppress all warnings in such cases.
|
||||
If we ever start using val_uint() for other purposes,
|
||||
val_int_from_real() will need a new separate parameter to
|
||||
suppress warnings.
|
||||
*/
|
||||
if (error && !want_unsigned_result)
|
||||
{
|
||||
THD *thd= get_thd();
|
||||
ErrConvDouble err(j);
|
||||
|
@ -998,7 +998,8 @@ static void make_sortkey(register Sort_param *param,
|
||||
if (maybe_null)
|
||||
*to++=1;
|
||||
char *tmp_buffer= param->tmp_buffer ? param->tmp_buffer : (char*)to;
|
||||
String tmp(tmp_buffer, param->sort_length, cs);
|
||||
String tmp(tmp_buffer, param->tmp_buffer ? param->sort_length :
|
||||
sort_field->length, cs);
|
||||
String *res= item->str_result(&tmp);
|
||||
if (!res)
|
||||
{
|
||||
|
@ -96,7 +96,7 @@ uchar **Filesort_buffer::alloc_sort_buffer(uint num_records, uint record_length)
|
||||
|
||||
if (m_idx_array.is_null())
|
||||
{
|
||||
sort_buff_sz= num_records * (record_length + sizeof(uchar*));
|
||||
sort_buff_sz= ((size_t)num_records) * (record_length + sizeof(uchar*));
|
||||
set_if_bigger(sort_buff_sz, record_length * MERGEBUFF2);
|
||||
uchar **sort_keys=
|
||||
(uchar**) my_malloc(sort_buff_sz, MYF(MY_THREAD_SPECIFIC));
|
||||
|
@ -4623,7 +4623,8 @@ resolve_ref_in_select_and_group(THD *thd, Item_ident *ref, SELECT_LEX *select)
|
||||
|
||||
if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY &&
|
||||
select->having_fix_field &&
|
||||
select_ref != not_found_item && !group_by_ref)
|
||||
select_ref != not_found_item && !group_by_ref &&
|
||||
!ref->alias_name_used)
|
||||
{
|
||||
/*
|
||||
Report the error if fields was found only in the SELECT item list and
|
||||
|
@ -1849,6 +1849,19 @@ bool Item_func_opt_neg::eq(const Item *item, bool binary_cmp) const
|
||||
}
|
||||
|
||||
|
||||
bool Item_func_interval::fix_fields(THD *thd, Item **ref)
|
||||
{
|
||||
if (Item_int_func::fix_fields(thd, ref))
|
||||
return true;
|
||||
for (uint i= 0 ; i < row->cols(); i++)
|
||||
{
|
||||
if (row->element_index(i)->check_cols(1))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void Item_func_interval::fix_length_and_dec()
|
||||
{
|
||||
uint rows= row->cols();
|
||||
|
@ -878,6 +878,7 @@ public:
|
||||
{
|
||||
allowed_arg_cols= 0; // Fetch this value from first argument
|
||||
}
|
||||
bool fix_fields(THD *, Item **);
|
||||
longlong val_int();
|
||||
void fix_length_and_dec();
|
||||
const char *func_name() const { return "interval"; }
|
||||
|
@ -3594,7 +3594,7 @@ void Item_func_group_concat::print(String *str, enum_query_type query_type)
|
||||
}
|
||||
}
|
||||
str->append(STRING_WITH_LEN(" separator \'"));
|
||||
str->append(*separator);
|
||||
str->append_for_single_quote(separator->ptr(), separator->length());
|
||||
str->append(STRING_WITH_LEN("\')"));
|
||||
}
|
||||
|
||||
|
@ -2743,6 +2743,24 @@ end:
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
|
||||
bool partition_info::error_if_requires_values() const
|
||||
{
|
||||
switch (part_type) {
|
||||
case NOT_A_PARTITION:
|
||||
case HASH_PARTITION:
|
||||
break;
|
||||
case RANGE_PARTITION:
|
||||
my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), "RANGE", "LESS THAN");
|
||||
return true;
|
||||
case LIST_PARTITION:
|
||||
my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), "LIST", "IN");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Fix partition data from parser.
|
||||
|
||||
@ -2832,6 +2850,8 @@ bool partition_info::fix_parser_data(THD *thd)
|
||||
part_elem= it++;
|
||||
List_iterator<part_elem_value> list_val_it(part_elem->list_val_list);
|
||||
num_elements= part_elem->list_val_list.elements;
|
||||
if (!num_elements && error_if_requires_values())
|
||||
DBUG_RETURN(true);
|
||||
DBUG_ASSERT(part_type == RANGE_PARTITION ?
|
||||
num_elements == 1U : TRUE);
|
||||
for (j= 0; j < num_elements; j++)
|
||||
|
@ -368,6 +368,7 @@ public:
|
||||
bool *prune_needs_default_values,
|
||||
MY_BITMAP *used_partitions);
|
||||
bool has_same_partitioning(partition_info *new_part_info);
|
||||
bool error_if_requires_values() const;
|
||||
private:
|
||||
static int list_part_cmp(const void* a, const void* b);
|
||||
bool set_up_default_partitions(handler *file, HA_CREATE_INFO *info,
|
||||
|
@ -1735,29 +1735,29 @@ ER_WRONG_AUTO_KEY 42000 S1009
|
||||
ER_BINLOG_CANT_DELETE_GTID_DOMAIN
|
||||
eng "Could not delete gtid domain. Reason: %s."
|
||||
ER_NORMAL_SHUTDOWN
|
||||
cze "%s: normální ukončení\n"
|
||||
dan "%s: Normal nedlukning\n"
|
||||
nla "%s: Normaal afgesloten \n"
|
||||
eng "%s: Normal shutdown\n"
|
||||
est "%s: MariaDB lõpetas\n"
|
||||
fre "%s: Arrêt normal du serveur\n"
|
||||
ger "%s: Normal heruntergefahren\n"
|
||||
greek "%s: Φυσιολογική διαδικασία shutdown\n"
|
||||
hun "%s: Normal leallitas\n"
|
||||
ita "%s: Shutdown normale\n"
|
||||
jpn "%s: 通常シャットダウン\n"
|
||||
kor "%s: 정상적인 shutdown\n"
|
||||
nor "%s: Normal avslutning\n"
|
||||
norwegian-ny "%s: Normal nedkopling\n"
|
||||
pol "%s: Standardowe zakończenie działania\n"
|
||||
por "%s: 'Shutdown' normal\n"
|
||||
rum "%s: Terminare normala\n"
|
||||
rus "%s: Корректная остановка\n"
|
||||
serbian "%s: Normalno gašenje\n"
|
||||
slo "%s: normálne ukončenie\n"
|
||||
spa "%s: Apagado normal\n"
|
||||
swe "%s: Normal avslutning\n"
|
||||
ukr "%s: Нормальне завершення\n"
|
||||
cze "%s: norm-Bální ukončení"
|
||||
dan "%s: Normal nedlukning"
|
||||
nla "%s: Normaal afgesloten"
|
||||
eng "%s: Normal shutdown"
|
||||
est "%s: MariaDB lõpetas"
|
||||
fre "%s: Arrêt normal du serveur"
|
||||
ger "%s: Normal heruntergefahren"
|
||||
greek "%s: Φυσιολογική διαδικασία shutdown"
|
||||
hun "%s: Normal leallitas"
|
||||
ita "%s: Shutdown normale"
|
||||
jpn "%s: 通常シャットダウン"
|
||||
kor "%s: 정상적인 shutdown"
|
||||
nor "%s: Normal avslutning"
|
||||
norwegian-ny "%s: Normal nedkopling"
|
||||
pol "%s: Standardowe zakończenie działania"
|
||||
por "%s: 'Shutdown' normal"
|
||||
rum "%s: Terminare normala"
|
||||
rus "%s: Корректная остановка"
|
||||
serbian "%s: Normalno gašenje"
|
||||
slo "%s: normálne ukončenie"
|
||||
spa "%s: Apagado normal"
|
||||
swe "%s: Normal avslutning"
|
||||
ukr "%s: Нормальне завершення"
|
||||
ER_GOT_SIGNAL
|
||||
cze "%s: přijat signal %d, končím\n"
|
||||
dan "%s: Fangede signal %d. Afslutter!!\n"
|
||||
|
@ -2282,37 +2282,42 @@ static void acl_insert_user(const char *user, const char *host,
|
||||
}
|
||||
|
||||
|
||||
static void acl_update_db(const char *user, const char *host, const char *db,
|
||||
static bool acl_update_db(const char *user, const char *host, const char *db,
|
||||
ulong privileges)
|
||||
{
|
||||
mysql_mutex_assert_owner(&acl_cache->lock);
|
||||
|
||||
bool updated= false;
|
||||
|
||||
for (uint i=0 ; i < acl_dbs.elements ; i++)
|
||||
{
|
||||
ACL_DB *acl_db=dynamic_element(&acl_dbs,i,ACL_DB*);
|
||||
if ((!acl_db->user && !user[0]) ||
|
||||
(acl_db->user &&
|
||||
!strcmp(user,acl_db->user)))
|
||||
(acl_db->user &&
|
||||
!strcmp(user,acl_db->user)))
|
||||
{
|
||||
if ((!acl_db->host.hostname && !host[0]) ||
|
||||
(acl_db->host.hostname &&
|
||||
!strcmp(host, acl_db->host.hostname)))
|
||||
(acl_db->host.hostname &&
|
||||
!strcmp(host, acl_db->host.hostname)))
|
||||
{
|
||||
if ((!acl_db->db && !db[0]) ||
|
||||
(acl_db->db && !strcmp(db,acl_db->db)))
|
||||
if ((!acl_db->db && !db[0]) ||
|
||||
(acl_db->db && !strcmp(db,acl_db->db)))
|
||||
|
||||
{
|
||||
if (privileges)
|
||||
{
|
||||
if (privileges)
|
||||
{
|
||||
acl_db->access= privileges;
|
||||
acl_db->initial_access= acl_db->access;
|
||||
}
|
||||
else
|
||||
delete_dynamic_element(&acl_dbs,i);
|
||||
}
|
||||
else
|
||||
delete_dynamic_element(&acl_dbs,i);
|
||||
updated= true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return updated;
|
||||
}
|
||||
|
||||
|
||||
@ -3746,9 +3751,21 @@ static int replace_db_table(TABLE *table, const char *db,
|
||||
acl_cache->clear(1); // Clear privilege cache
|
||||
if (old_row_exists)
|
||||
acl_update_db(combo.user.str,combo.host.str,db,rights);
|
||||
else
|
||||
if (rights)
|
||||
acl_insert_db(combo.user.str,combo.host.str,db,rights);
|
||||
else if (rights)
|
||||
{
|
||||
/*
|
||||
If we did not have an already existing row, for users, we must always
|
||||
insert an ACL_DB entry. For roles however, it is possible that one was
|
||||
already created when DB privileges were propagated from other granted
|
||||
roles onto the current role. For this case, first try to update the
|
||||
existing entry, otherwise insert a new one.
|
||||
*/
|
||||
if (!combo.is_role() ||
|
||||
!acl_update_db(combo.user.str, combo.host.str, db, rights))
|
||||
{
|
||||
acl_insert_db(combo.user.str,combo.host.str,db,rights);
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/* This could only happen if the grant tables got corrupted */
|
||||
@ -5651,6 +5668,7 @@ static int merge_role_privileges(ACL_ROLE *role __attribute__((unused)),
|
||||
{
|
||||
PRIVS_TO_MERGE *data= (PRIVS_TO_MERGE *)context;
|
||||
|
||||
DBUG_ASSERT(grantee->counter > 0);
|
||||
if (--grantee->counter)
|
||||
return 1; // don't recurse into grantee just yet
|
||||
|
||||
@ -6743,17 +6761,14 @@ end_index_init:
|
||||
DBUG_RETURN(return_val);
|
||||
}
|
||||
|
||||
|
||||
static my_bool role_propagate_grants_action(void *ptr,
|
||||
void *unused __attribute__((unused)))
|
||||
static my_bool collect_leaf_roles(void *role_ptr,
|
||||
void *roles_array)
|
||||
{
|
||||
ACL_ROLE *role= (ACL_ROLE *)ptr;
|
||||
if (role->counter)
|
||||
return 0;
|
||||
|
||||
mysql_mutex_assert_owner(&acl_cache->lock);
|
||||
PRIVS_TO_MERGE data= { PRIVS_TO_MERGE::ALL, 0, 0 };
|
||||
traverse_role_graph_up(role, &data, NULL, merge_role_privileges);
|
||||
ACL_ROLE *role= static_cast<ACL_ROLE *>(role_ptr);
|
||||
Dynamic_array<ACL_ROLE *> *array=
|
||||
static_cast<Dynamic_array<ACL_ROLE *> *>(roles_array);
|
||||
if (!role->counter)
|
||||
array->push(role);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -6820,7 +6835,15 @@ bool grant_reload(THD *thd)
|
||||
}
|
||||
|
||||
mysql_mutex_lock(&acl_cache->lock);
|
||||
my_hash_iterate(&acl_roles, role_propagate_grants_action, NULL);
|
||||
Dynamic_array<ACL_ROLE *> leaf_roles;
|
||||
my_hash_iterate(&acl_roles, collect_leaf_roles, &leaf_roles);
|
||||
PRIVS_TO_MERGE data= { PRIVS_TO_MERGE::ALL, 0, 0 };
|
||||
for (size_t i= 0; i < leaf_roles.elements(); i++)
|
||||
{
|
||||
traverse_role_graph_up(leaf_roles.at(i), &data, NULL,
|
||||
merge_role_privileges);
|
||||
}
|
||||
|
||||
mysql_mutex_unlock(&acl_cache->lock);
|
||||
|
||||
mysql_rwlock_unlock(&LOCK_grant);
|
||||
|
@ -4882,16 +4882,11 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
||||
my_error(ER_PARTITION_WRONG_VALUES_ERROR, MYF(0),
|
||||
"LIST", "IN");
|
||||
}
|
||||
else if (tab_part_info->part_type == RANGE_PARTITION)
|
||||
{
|
||||
my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0),
|
||||
"RANGE", "LESS THAN");
|
||||
}
|
||||
else
|
||||
{
|
||||
DBUG_ASSERT(tab_part_info->part_type == LIST_PARTITION);
|
||||
my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0),
|
||||
"LIST", "IN");
|
||||
DBUG_ASSERT(tab_part_info->part_type == RANGE_PARTITION ||
|
||||
tab_part_info->part_type == LIST_PARTITION);
|
||||
(void) tab_part_info->error_if_requires_values();
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
|
@ -5097,12 +5097,8 @@ opt_part_values:
|
||||
partition_info *part_info= lex->part_info;
|
||||
if (! lex->is_partition_management())
|
||||
{
|
||||
if (part_info->part_type == RANGE_PARTITION)
|
||||
my_yyabort_error((ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0),
|
||||
"RANGE", "LESS THAN"));
|
||||
if (part_info->part_type == LIST_PARTITION)
|
||||
my_yyabort_error((ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0),
|
||||
"LIST", "IN"));
|
||||
if (part_info->error_if_requires_values())
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
else
|
||||
part_info->part_type= HASH_PARTITION;
|
||||
|
@ -204,7 +204,7 @@ typedef int *(*update_var)(THD *, struct st_mysql_show_var *);
|
||||
typedef struct st_lex_user {
|
||||
LEX_STRING user, host, plugin, auth;
|
||||
LEX_STRING pwtext, pwhash;
|
||||
bool is_role() { return user.str[0] && !host.str[0]; }
|
||||
bool is_role() const { return user.str[0] && !host.str[0]; }
|
||||
void set_lex_string(LEX_STRING *l, char *buf)
|
||||
{
|
||||
if (is_role())
|
||||
|
@ -6337,6 +6337,14 @@ void TABLE::create_key_part_by_field(KEY_PART_INFO *key_part_info,
|
||||
might be reused.
|
||||
*/
|
||||
key_part_info->store_length= key_part_info->length;
|
||||
/*
|
||||
For BIT fields null_bit is not set to 0 even if the field is defined
|
||||
as NOT NULL, look at Field_bit::Field_bit
|
||||
*/
|
||||
if (!field->real_maybe_null())
|
||||
{
|
||||
key_part_info->null_bit= 0;
|
||||
}
|
||||
|
||||
/*
|
||||
The total store length of the key part is the raw length of the field +
|
||||
|
@ -226,10 +226,8 @@ trx_undo_report_row_operation(
|
||||
marking, the record in the clustered
|
||||
index, otherwise NULL */
|
||||
const ulint* offsets, /*!< in: rec_get_offsets(rec) */
|
||||
roll_ptr_t* roll_ptr) /*!< out: rollback pointer to the
|
||||
inserted undo log record,
|
||||
0 if BTR_NO_UNDO_LOG
|
||||
flag was specified */
|
||||
roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the
|
||||
undo log record */
|
||||
MY_ATTRIBUTE((nonnull(1,2,8), warn_unused_result));
|
||||
/******************************************************************//**
|
||||
Copies an undo record to heap. This function can be called if we know that
|
||||
|
@ -1221,10 +1221,8 @@ trx_undo_report_row_operation(
|
||||
marking, the record in the clustered
|
||||
index, otherwise NULL */
|
||||
const ulint* offsets, /*!< in: rec_get_offsets(rec) */
|
||||
roll_ptr_t* roll_ptr) /*!< out: rollback pointer to the
|
||||
inserted undo log record,
|
||||
0 if BTR_NO_UNDO_LOG
|
||||
flag was specified */
|
||||
roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the
|
||||
undo log record */
|
||||
{
|
||||
trx_t* trx;
|
||||
trx_undo_t* undo;
|
||||
|
@ -226,10 +226,8 @@ trx_undo_report_row_operation(
|
||||
marking, the record in the clustered
|
||||
index, otherwise NULL */
|
||||
const ulint* offsets, /*!< in: rec_get_offsets(rec) */
|
||||
roll_ptr_t* roll_ptr) /*!< out: rollback pointer to the
|
||||
inserted undo log record,
|
||||
0 if BTR_NO_UNDO_LOG
|
||||
flag was specified */
|
||||
roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the
|
||||
undo log record */
|
||||
MY_ATTRIBUTE((nonnull(1,2,8), warn_unused_result));
|
||||
/******************************************************************//**
|
||||
Copies an undo record to heap. This function can be called if we know that
|
||||
|
@ -1221,10 +1221,8 @@ trx_undo_report_row_operation(
|
||||
marking, the record in the clustered
|
||||
index, otherwise NULL */
|
||||
const ulint* offsets, /*!< in: rec_get_offsets(rec) */
|
||||
roll_ptr_t* roll_ptr) /*!< out: rollback pointer to the
|
||||
inserted undo log record,
|
||||
0 if BTR_NO_UNDO_LOG
|
||||
flag was specified */
|
||||
roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the
|
||||
undo log record */
|
||||
{
|
||||
trx_t* trx;
|
||||
trx_undo_t* undo;
|
||||
|
Loading…
x
Reference in New Issue
Block a user