mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
BUG#28086 (SBR of USER() becomes corrupted on slave):
Marking statements containing USER() or CURRENT_USER() as unsafe, causing them to switch to using row-based logging in MIXED mode and generate a warning in STATEMENT mode. mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result: Result change. mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test: Adding test to check that USER() and CURRENT_USER() cause a switch to row-based logging. sql/sql_yacc.yy: Setting statements containing USER() or CURRENT_USER() to be unsafe.
This commit is contained in:
@ -405,6 +405,26 @@ CREATE TABLE t12 (data LONG);
|
||||
LOCK TABLES t12 WRITE;
|
||||
INSERT INTO t12 VALUES(UUID());
|
||||
UNLOCK TABLES;
|
||||
CREATE FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
CREATE FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
DROP TABLE IF EXISTS t13;
|
||||
CREATE TABLE t13 (data CHAR(64));
|
||||
INSERT INTO t13 VALUES (USER());
|
||||
INSERT INTO t13 VALUES (my_user());
|
||||
INSERT INTO t13 VALUES (CURRENT_USER());
|
||||
INSERT INTO t13 VALUES (my_current_user());
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # drop database if exists mysqltest1
|
||||
@ -709,6 +729,30 @@ master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t12
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t12 (data LONG)
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t12)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t13
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t13 (data CHAR(64))
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # drop database if exists mysqltest1
|
||||
@ -1013,5 +1057,29 @@ master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t12
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t12 (data LONG)
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t12)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t13
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t13 (data CHAR(64))
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
drop database mysqltest1;
|
||||
set global binlog_format =@my_binlog_format;
|
||||
|
@ -518,6 +518,42 @@ CREATE TABLE t12 (data LONG);
|
||||
LOCK TABLES t12 WRITE;
|
||||
INSERT INTO t12 VALUES(UUID());
|
||||
UNLOCK TABLES;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# BUG#28086: SBR of USER() becomes corrupted on slave
|
||||
#
|
||||
|
||||
connection master;
|
||||
|
||||
# Just to get something that is non-trivial, albeit still simple, we
|
||||
# stuff the result of USER() and CURRENT_USER() into a variable.
|
||||
--delimiter $$
|
||||
CREATE FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
--delimiter $$
|
||||
CREATE FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
DROP TABLE IF EXISTS t13;
|
||||
CREATE TABLE t13 (data CHAR(64));
|
||||
INSERT INTO t13 VALUES (USER());
|
||||
INSERT INTO t13 VALUES (my_user());
|
||||
INSERT INTO t13 VALUES (CURRENT_USER());
|
||||
INSERT INTO t13 VALUES (my_current_user());
|
||||
|
||||
source include/show_binlog_events.inc;
|
||||
sync_slave_with_master;
|
||||
|
Reference in New Issue
Block a user