From b34bb81eaf0f1fd653f93257fbbdaa4c31ea8ea5 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Mon, 15 Mar 2021 22:48:30 -0700 Subject: [PATCH 1/5] MDEV-25112 MIN/MAX aggregation over an indexed column may return wrong result If a query with implicit grouping contains in MIN/MAX set function in the select list over a column that is a part of an index then the query might be subject to MIN/MAX optimization. With this optimization the server performs a look-up into an index, fetches a value of the column C used in the MIN/MAX function and substitute the MIN/MAX expression for this value. This allows to eliminate the table containing C from further join processing. In order the optimization to be applied the WHERE condition must be a conjunction of simple equality/inequality predicates or/and BETWEEN predicates. The bug fixed in the patch resulted in fetching a wrong value from the index used for MIN/MAX optimization. It may happened when a BETWEEN predicate containing the MIN/MAX value followed a strict inequality. Approved by dmitry.shulga@mariadb.com --- mysql-test/r/func_group.result | 34 ++++++++++++++++++++++++++++++++++ mysql-test/t/func_group.test | 28 ++++++++++++++++++++++++++++ sql/opt_sum.cc | 3 +++ 3 files changed, 65 insertions(+) diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result index 0f9fdefb81a..fb07ba76fb2 100644 --- a/mysql-test/r/func_group.result +++ b/mysql-test/r/func_group.result @@ -2458,3 +2458,37 @@ select count(*)+sleep(0) from t1; count(*)+sleep(0) 2 drop table t1; +# +# MDEV-25112: MIN/MAX optimization for query containing BETWEEN in WHERE +# +create table t1 (a int) engine=myisam; +insert into t1 values (267), (273), (287), (303), (308); +select max(a) from t1 where a < 303 and (a between 267 AND 287); +max(a) +287 +explain select max(a) from t1 where a < 303 and (a between 267 AND 287); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where +select min(a) from t1 where a > 267 and (a between 273 AND 303); +min(a) +273 +explain select min(a) from t1 where a > 267 and (a between 273 AND 303); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where +create index idx on t1(a); +select max(a) from t1 where a < 303 and (a between 267 AND 287); +max(a) +287 +explain select max(a) from t1 where a < 303 and (a between 267 AND 287); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away +select min(a) from t1 where a > 267 and (a between 273 AND 303); +min(a) +273 +explain select min(a) from t1 where a > 267 and (a between 273 AND 303); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away +drop table t1; +# +# End of 10.2 tests +# diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test index 8bbc9e6a040..d7da9fe8c96 100644 --- a/mysql-test/t/func_group.test +++ b/mysql-test/t/func_group.test @@ -1703,4 +1703,32 @@ select count(*)+sleep(0) from t1; drop table t1; +--echo # +--echo # MDEV-25112: MIN/MAX optimization for query containing BETWEEN in WHERE +--echo # +create table t1 (a int) engine=myisam; +insert into t1 values (267), (273), (287), (303), (308); + +let $q1= +select max(a) from t1 where a < 303 and (a between 267 AND 287); +let $q2= +select min(a) from t1 where a > 267 and (a between 273 AND 303); + +eval $q1; +eval explain $q1; +eval $q2; +eval explain $q2; + +create index idx on t1(a); + +eval $q1; +eval explain $q1; +eval $q2; +eval explain $q2; + +drop table t1; + +--echo # +--echo # End of 10.2 tests +--echo # diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index 02b95dae44a..868d8b26f4b 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -830,7 +830,10 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo, if (is_field_part) { if (between || eq_type) + { *range_fl&= ~(NO_MAX_RANGE | NO_MIN_RANGE); + *range_fl&= ~(max_fl ? NEAR_MAX : NEAR_MIN); + } else { *range_fl&= ~(max_fl ? NO_MAX_RANGE : NO_MIN_RANGE); From 4ca4d606ac96cabe013eb5c9e4eda92233cf1697 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 19 Mar 2021 11:14:47 +1100 Subject: [PATCH 2/5] myseek: AIX has no "tell" AIX detects tell in the configure however it really isn't there. Use the my_seek aka lseek implementation. --- mysys/my_seek.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysys/my_seek.c b/mysys/my_seek.c index 6a370b0ad43..db364ccddda 100644 --- a/mysys/my_seek.c +++ b/mysys/my_seek.c @@ -86,7 +86,7 @@ my_off_t my_tell(File fd, myf MyFlags) DBUG_ENTER("my_tell"); DBUG_PRINT("my",("fd: %d MyFlags: %lu",fd, MyFlags)); DBUG_ASSERT(fd >= 0); -#if defined (HAVE_TELL) && !defined (_WIN32) +#if defined (HAVE_TELL) && !defined (_WIN32) && !defined(_AIX) pos= tell(fd); #else pos= my_seek(fd, 0L, MY_SEEK_CUR,0); From 4e825b0e8ae07e1e847cbbc3c5b7203ae5b96a89 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 19 Mar 2021 11:46:07 +0100 Subject: [PATCH 3/5] update libmariadb This partially reverts 66106130a6c --- libmariadb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmariadb b/libmariadb index a746c3af449..fc431a035a2 160000 --- a/libmariadb +++ b/libmariadb @@ -1 +1 @@ -Subproject commit a746c3af449a8754e78ad7971e59e79af7957cdb +Subproject commit fc431a035a21ac1d4ef25d9d3cd8c4d7e64a8ee7 From 2944d7e69292999dbc0365cccf03efca4192967c Mon Sep 17 00:00:00 2001 From: Alice Sherepa Date: Fri, 19 Mar 2021 12:20:50 +0100 Subject: [PATCH 4/5] fix for tests from engines/funcs --- .../suite/engines/funcs/r/rpl_000015.result | 237 ++---------------- .../suite/engines/funcs/r/rpl_do_grant.result | 58 ++--- .../engines/funcs/r/rpl_flushlog_loop.result | 53 +--- .../engines/funcs/r/rpl_ignore_grant.result | 4 +- .../engines/funcs/r/rpl_server_id1.result | 8 +- .../suite/engines/funcs/r/rpl_sp.result | 80 +++--- .../suite/engines/funcs/t/rpl_000015.test | 32 +-- .../engines/funcs/t/rpl_flushlog_loop.test | 7 +- .../suite/engines/funcs/t/rpl_server_id1.test | 5 +- .../funcs/t/rpl_switch_stm_row_mixed.test | 2 +- 10 files changed, 116 insertions(+), 370 deletions(-) diff --git a/mysql-test/suite/engines/funcs/r/rpl_000015.result b/mysql-test/suite/engines/funcs/r/rpl_000015.result index 7d8fea8f195..56fc002ac53 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_000015.result +++ b/mysql-test/suite/engines/funcs/r/rpl_000015.result @@ -7,229 +7,40 @@ master-bin.000001 329 connection slave; include/stop_slave.inc reset slave; -show slave status; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry # -Master_Log_File -Read_Master_Log_Pos 4 -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File -Slave_IO_Running No -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos 0 -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error -Last_SQL_Errno 0 -Last_SQL_Error -Replicate_Ignore_Server_Ids -Master_Server_Id 1 -Master_SSL_Crl -Master_SSL_Crlpath -Using_Gtid No -Gtid_IO_Pos -Replicate_Do_Domain_Ids -Replicate_Ignore_Domain_Ids -Parallel_Mode conservative -SQL_Delay 0 -SQL_Remaining_Delay NULL -Slave_SQL_Running_State +Slave_IO_Running = 'No' +Slave_SQL_Running = 'No' +Last_SQL_Errno = '0' +Last_SQL_Error = '' +Exec_Master_Log_Pos = '0' change master to master_host='127.0.0.1'; -show slave status; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry # -Master_Log_File -Read_Master_Log_Pos 4 -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File -Slave_IO_Running No -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos 0 -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error -Last_SQL_Errno 0 -Last_SQL_Error -Replicate_Ignore_Server_Ids -Master_Server_Id 1 -Master_SSL_Crl -Master_SSL_Crlpath -Using_Gtid No -Gtid_IO_Pos -Replicate_Do_Domain_Ids -Replicate_Ignore_Domain_Ids -Parallel_Mode conservative -SQL_Delay 0 -SQL_Remaining_Delay NULL -Slave_SQL_Running_State -change master to master_host='127.0.0.1',master_user='root', +Slave_IO_Running = 'No' +Slave_SQL_Running = 'No' +Last_SQL_Errno = '0' +Last_SQL_Error = '' +Exec_Master_Log_Pos = '0' +change master to master_host='127.0.0.1',master_user='root', master_password='',master_port=MASTER_PORT; -show slave status; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry # -Master_Log_File -Read_Master_Log_Pos 4 -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File -Slave_IO_Running No -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos 0 -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error -Last_SQL_Errno 0 -Last_SQL_Error -Replicate_Ignore_Server_Ids -Master_Server_Id 1 -Master_SSL_Crl -Master_SSL_Crlpath -Using_Gtid No -Gtid_IO_Pos -Replicate_Do_Domain_Ids -Replicate_Ignore_Domain_Ids -Parallel_Mode conservative -SQL_Delay 0 -SQL_Remaining_Delay NULL -Slave_SQL_Running_State include/start_slave.inc -show slave status; -Slave_IO_State Waiting for master to send event -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos 329 -Relay_Log_File slave-relay-bin.000002 -Relay_Log_Pos 629 -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running Yes -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos 329 -Relay_Log_Space 938 -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error -Last_SQL_Errno 0 -Last_SQL_Error -Replicate_Ignore_Server_Ids -Master_Server_Id 1 -Master_SSL_Crl -Master_SSL_Crlpath -Using_Gtid No -Gtid_IO_Pos -Replicate_Do_Domain_Ids -Replicate_Ignore_Domain_Ids -Parallel_Mode conservative -SQL_Delay 0 -SQL_Remaining_Delay NULL -Slave_SQL_Running_State Slave has read all relay log; waiting for the slave I/O thread to update it +Slave_IO_Running = 'Yes' +Slave_SQL_Running = 'Yes' +Last_SQL_Errno = '0' +Last_SQL_Error = '' +Exec_Master_Log_Pos = '329' connection master; -drop table if exists t1; create table t1 (n int, PRIMARY KEY(n)); insert into t1 values (10),(45),(90); connection slave; -connection slave; SELECT * FROM t1 ORDER BY n; -n 10 -n 45 -n 90 +n +10 +45 +90 connection master; SELECT * FROM t1 ORDER BY n; -n 10 -n 45 -n 90 +n +10 +45 +90 drop table t1; connection slave; include/rpl_end.inc diff --git a/mysql-test/suite/engines/funcs/r/rpl_do_grant.result b/mysql-test/suite/engines/funcs/r/rpl_do_grant.result index 9eca21b38e4..0797e66e9ec 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_do_grant.result +++ b/mysql-test/suite/engines/funcs/r/rpl_do_grant.result @@ -15,8 +15,8 @@ grant drop on test.* to rpl_do_grant@localhost; connection slave; show grants for rpl_do_grant@localhost; Grants for rpl_do_grant@localhost -GRANT SELECT ON *.* TO 'rpl_do_grant'@'localhost' -GRANT DROP ON `test`.* TO 'rpl_do_grant'@'localhost' +GRANT SELECT ON *.* TO `rpl_do_grant`@`localhost` +GRANT DROP ON `test`.* TO `rpl_do_grant`@`localhost` connection master; set password for rpl_do_grant@localhost=password("does it work?"); connection slave; @@ -54,55 +54,55 @@ connection master; create user rpl_do_grant@localhost; show grants for rpl_do_grant@localhost; Grants for rpl_do_grant@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant`@`localhost` show grants for rpl_do_grant2@localhost; ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost' connection slave; show grants for rpl_do_grant@localhost; Grants for rpl_do_grant@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant`@`localhost` show grants for rpl_do_grant2@localhost; ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost' connection master; rename user rpl_do_grant@localhost to rpl_do_grant2@localhost; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` connection slave; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` connection master; grant DELETE,INSERT on mysqltest1.* to rpl_do_grant2@localhost; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' -GRANT INSERT, DELETE ON `mysqltest1`.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` +GRANT INSERT, DELETE ON `mysqltest1`.* TO `rpl_do_grant2`@`localhost` connection slave; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' -GRANT INSERT, DELETE ON `mysqltest1`.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` +GRANT INSERT, DELETE ON `mysqltest1`.* TO `rpl_do_grant2`@`localhost` connection master; revoke DELETE on mysqltest1.* from rpl_do_grant2@localhost; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' -GRANT INSERT ON `mysqltest1`.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` +GRANT INSERT ON `mysqltest1`.* TO `rpl_do_grant2`@`localhost` connection slave; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' -GRANT INSERT ON `mysqltest1`.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` +GRANT INSERT ON `mysqltest1`.* TO `rpl_do_grant2`@`localhost` connection master; revoke all privileges, grant option from rpl_do_grant2@localhost; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` connection slave; show grants for rpl_do_grant2@localhost; Grants for rpl_do_grant2@localhost -GRANT USAGE ON *.* TO 'rpl_do_grant2'@'localhost' +GRANT USAGE ON *.* TO `rpl_do_grant2`@`localhost` connection master; drop user rpl_do_grant2@localhost; show grants for rpl_do_grant2@localhost; @@ -142,9 +142,9 @@ Host Db User Routine_name Routine_type Grantor Proc_priv Timestamp localhost bug42217_db create_rout_db upgrade_del_func FUNCTION create_rout_db@localhost Execute,Alter Routine # SHOW GRANTS FOR 'create_rout_db'@'localhost'; Grants for create_rout_db@localhost -GRANT USAGE ON *.* TO 'create_rout_db'@'localhost' IDENTIFIED BY PASSWORD '*08792480350CBA057BDE781B9DF183B263934601' -GRANT CREATE ROUTINE ON `bug42217_db`.* TO 'create_rout_db'@'localhost' WITH GRANT OPTION -GRANT EXECUTE, ALTER ROUTINE ON FUNCTION `bug42217_db`.`upgrade_del_func` TO 'create_rout_db'@'localhost' +GRANT USAGE ON *.* TO `create_rout_db`@`localhost` IDENTIFIED BY PASSWORD '*08792480350CBA057BDE781B9DF183B263934601' +GRANT CREATE ROUTINE ON `bug42217_db`.* TO `create_rout_db`@`localhost` WITH GRANT OPTION +GRANT EXECUTE, ALTER ROUTINE ON FUNCTION `bug42217_db`.`upgrade_del_func` TO `create_rout_db`@`localhost` USE bug42217_db; SHOW CREATE FUNCTION upgrade_del_func; Function sql_mode Create Function character_set_client collation_connection Database Collation @@ -236,11 +236,11 @@ GRANT EXECUTE ON PROCEDURE p1 TO 'user49119'@'localhost'; ### Showing grants for both users: root and user49119 (master) SHOW GRANTS FOR 'user49119'@'localhost'; Grants for user49119@localhost -GRANT USAGE ON *.* TO 'user49119'@'localhost' -GRANT EXECUTE ON PROCEDURE `test`.`p1` TO 'user49119'@'localhost' +GRANT USAGE ON *.* TO `user49119`@`localhost` +GRANT EXECUTE ON PROCEDURE `test`.`p1` TO `user49119`@`localhost` SHOW GRANTS FOR CURRENT_USER; Grants for root@localhost -GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION +GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION ############################################################## connection slave; @@ -248,11 +248,11 @@ connection slave; ### Showing grants for both users: root and user49119 (master) SHOW GRANTS FOR 'user49119'@'localhost'; Grants for user49119@localhost -GRANT USAGE ON *.* TO 'user49119'@'localhost' -GRANT EXECUTE ON PROCEDURE `test`.`p1` TO 'user49119'@'localhost' +GRANT USAGE ON *.* TO `user49119`@`localhost` +GRANT EXECUTE ON PROCEDURE `test`.`p1` TO `user49119`@`localhost` SHOW GRANTS FOR CURRENT_USER; Grants for root@localhost -GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION +GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION ############################################################## connection master; @@ -266,10 +266,10 @@ ERROR 42000: There is no such grant defined for user 'root' on host 'localhost' ### after revoke statement failure SHOW GRANTS FOR 'user49119'@'localhost'; Grants for user49119@localhost -GRANT USAGE ON *.* TO 'user49119'@'localhost' +GRANT USAGE ON *.* TO `user49119`@`localhost` SHOW GRANTS FOR CURRENT_USER; Grants for root@localhost -GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION +GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION ############################################################## connection slave; @@ -278,10 +278,10 @@ connection slave; ### after revoke statement failure (should match SHOW GRANTS FOR 'user49119'@'localhost'; Grants for user49119@localhost -GRANT USAGE ON *.* TO 'user49119'@'localhost' +GRANT USAGE ON *.* TO `user49119`@`localhost` SHOW GRANTS FOR CURRENT_USER; Grants for root@localhost -GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION +GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION ############################################################## connection master; diff --git a/mysql-test/suite/engines/funcs/r/rpl_flushlog_loop.result b/mysql-test/suite/engines/funcs/r/rpl_flushlog_loop.result index 4a56880d97f..527dd8dc983 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_flushlog_loop.result +++ b/mysql-test/suite/engines/funcs/r/rpl_flushlog_loop.result @@ -10,56 +10,5 @@ change master to master_host='127.0.0.1',master_user='root', master_password='',master_port=SLAVE_PORT; include/start_slave.inc flush logs; -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port SLAVE_PORT -Connect_Retry 60 -Master_Log_File slave-bin.000001 -Read_Master_Log_Pos 328 -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File slave-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running Yes -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table # -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos 328 -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -Last_IO_Errno 0 -Last_IO_Error -Last_SQL_Errno 0 -Last_SQL_Error -Replicate_Ignore_Server_Ids -Master_Server_Id 2 -Master_SSL_Crl -Master_SSL_Crlpath -Using_Gtid No -Gtid_IO_Pos -Replicate_Do_Domain_Ids -Replicate_Ignore_Domain_Ids -Parallel_Mode conservative -SQL_Delay 0 -SQL_Remaining_Delay NULL -Slave_SQL_Running_State Slave has read all relay log; waiting for the slave I/O thread to update it -stop slave; +include/stop_slave.inc include/rpl_end.inc diff --git a/mysql-test/suite/engines/funcs/r/rpl_ignore_grant.result b/mysql-test/suite/engines/funcs/r/rpl_ignore_grant.result index 29e6bb6d6a4..0a5564ac6c0 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_ignore_grant.result +++ b/mysql-test/suite/engines/funcs/r/rpl_ignore_grant.result @@ -15,8 +15,8 @@ grant select on *.* to rpl_ignore_grant@localhost; grant drop on test.* to rpl_ignore_grant@localhost; show grants for rpl_ignore_grant@localhost; Grants for rpl_ignore_grant@localhost -GRANT SELECT ON *.* TO 'rpl_ignore_grant'@'localhost' -GRANT DROP ON `test`.* TO 'rpl_ignore_grant'@'localhost' +GRANT SELECT ON *.* TO `rpl_ignore_grant`@`localhost` +GRANT DROP ON `test`.* TO `rpl_ignore_grant`@`localhost` connection slave; show grants for rpl_ignore_grant@localhost; ERROR 42000: There is no such grant defined for user 'rpl_ignore_grant' on host 'localhost' diff --git a/mysql-test/suite/engines/funcs/r/rpl_server_id1.result b/mysql-test/suite/engines/funcs/r/rpl_server_id1.result index 3f318a0a664..001d1151843 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_server_id1.result +++ b/mysql-test/suite/engines/funcs/r/rpl_server_id1.result @@ -5,9 +5,11 @@ create table t1 (n int); reset master; include/stop_slave.inc change master to master_port=SLAVE_PORT; -show slave status; -Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State - 127.0.0.1 root SLAVE_PORT 1 4 slave-relay-bin.000001 4 No No # # 0 0 0 256 None 0 No NULL No 0 0 1 No conservative 0 NULL +Slave_IO_Running = 'No' +Slave_SQL_Running = 'No' +Last_SQL_Errno = '0' +Last_SQL_Error = '' +Exec_Master_Log_Pos = '0' start slave; insert into t1 values (1); include/wait_for_slave_param.inc [Last_IO_Errno] diff --git a/mysql-test/suite/engines/funcs/r/rpl_sp.result b/mysql-test/suite/engines/funcs/r/rpl_sp.result index e19732fe7ff..0e5929bcbd7 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_sp.result +++ b/mysql-test/suite/engines/funcs/r/rpl_sp.result @@ -16,7 +16,7 @@ insert into t1 values (b); insert into t1 values (unix_timestamp()); end| select * from mysql.proc where name='foo' and db='mysqltest1'; -db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 +db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate mysqltest1 foo PROCEDURE foo SQL CONTAINS_SQL NO DEFINER begin declare b int; set b = 8; @@ -27,10 +27,10 @@ declare b int; set b = 8; insert into t1 values (b); insert into t1 values (unix_timestamp()); -end +end NONE connection slave; select * from mysql.proc where name='foo' and db='mysqltest1'; -db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 +db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate mysqltest1 foo PROCEDURE foo SQL CONTAINS_SQL NO DEFINER begin declare b int; set b = 8; @@ -41,7 +41,7 @@ declare b int; set b = 8; insert into t1 values (b); insert into t1 values (unix_timestamp()); -end +end NONE connection master; set timestamp=1000000000; call foo(); @@ -126,25 +126,26 @@ ERROR 23000: Duplicate entry '20' for key 'a' show warnings; Level Code Message Error 1062 Duplicate entry '20' for key 'a' +Note 4094 At line 4 in mysqltest1.foo4 select * from t2; a connection slave; select * from t2; a select * from mysql.proc where name="foo4" and db='mysqltest1'; -db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 +db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate mysqltest1 foo4 PROCEDURE foo4 SQL CONTAINS_SQL YES DEFINER begin insert into t2 values(20),(20); end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin insert into t2 values(20),(20); -end +end NONE connection master; drop procedure foo4; select * from mysql.proc where name="foo4" and db='mysqltest1'; -db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 +db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate connection slave; select * from mysql.proc where name="foo4" and db='mysqltest1'; -db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 +db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate connection master; drop procedure foo; drop procedure foo2; @@ -234,22 +235,22 @@ select fn3(); fn3() 0 select * from mysql.proc where db='mysqltest1'; -db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 +db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate mysqltest1 fn1 FUNCTION fn1 SQL NO_SQL NO DEFINER int(11) begin return unix_timestamp(); end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin return unix_timestamp(); -end +end NONE mysqltest1 fn2 FUNCTION fn2 SQL NO_SQL NO DEFINER int(11) begin return unix_timestamp(); end zedjzlcsjhd@localhost # # STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION latin1 latin1_swedish_ci latin1_swedish_ci begin return unix_timestamp(); -end +end NONE mysqltest1 fn3 FUNCTION fn3 SQL READS_SQL_DATA NO DEFINER int(11) begin return 0; end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin return 0; -end +end NONE select * from t1; a 1000000000 @@ -259,22 +260,22 @@ select * from t1; a 1000000000 select * from mysql.proc where db='mysqltest1'; -db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 +db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate mysqltest1 fn1 FUNCTION fn1 SQL NO_SQL NO DEFINER int(11) begin return unix_timestamp(); end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin return unix_timestamp(); -end +end NONE mysqltest1 fn2 FUNCTION fn2 SQL NO_SQL NO DEFINER int(11) begin return unix_timestamp(); end zedjzlcsjhd@localhost # # STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION latin1 latin1_swedish_ci latin1_swedish_ci begin return unix_timestamp(); -end +end NONE mysqltest1 fn3 FUNCTION fn3 SQL READS_SQL_DATA NO DEFINER int(11) begin return 0; end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin return 0; -end +end NONE connection master; delete from t2; alter table t2 add unique (a); @@ -290,6 +291,7 @@ end| do fn1(100); Warnings: Error 1062 Duplicate entry '100' for key 'a' +Note 4094 At line 3 in mysqltest1.fn1 select fn1(20); ERROR 23000: Duplicate entry '20' for key 'a' select * from t2; @@ -794,19 +796,19 @@ insert into t1 values (b); insert into t1 values (unix_timestamp()); end /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values ( NAME_CONST('b',8)) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values (unix_timestamp()) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete from t1 @@ -851,20 +853,20 @@ insert into t2 values(3); insert into t1 values (5); end /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t2 values(3) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=0/*!*/; insert into t1 values (15) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=1411383296/*!*/; @@ -875,20 +877,20 @@ SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=0/*!*/; alter procedure foo4 sql security invoker /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=1411383296/*!*/; insert into t2 values(3) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values (5) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=0/*!*/; @@ -928,7 +930,7 @@ insert into t1 values (x); return x+2; end /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete t1,t2 from t1,t2 @@ -936,13 +938,13 @@ delete t1,t2 from t1,t2 SET TIMESTAMP=t/*!*/; COMMIT /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SELECT `mysqltest1`.`fn1`(20) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t2 values(fn1(21)) @@ -958,13 +960,13 @@ begin return unix_timestamp(); end /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete from t1 /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values(fn1()) @@ -986,7 +988,7 @@ begin return 0; end /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete from t2 @@ -1005,7 +1007,7 @@ insert into t2 values(x),(x); return 10; end /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete from t1 @@ -1014,13 +1016,13 @@ COMMIT/*!*/; SET TIMESTAMP=t/*!*/; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10 /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values (1) /*!*/; COMMIT/*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete from t1 @@ -1029,7 +1031,7 @@ COMMIT/*!*/; SET TIMESTAMP=t/*!*/; drop trigger trg /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values (1) @@ -1074,7 +1076,7 @@ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW SET TIMESTAMP=t/*!*/; create table t1 (a int) /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 (a) values (f1()) @@ -1099,7 +1101,7 @@ SET TIMESTAMP=t/*!*/; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10)) INSERT INTO t1 VALUES(arg) /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci')) @@ -1151,7 +1153,7 @@ SET TIMESTAMP=t/*!*/; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`() begin end /*!*/; -BEGIN +START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t values ( 1 ) @@ -1164,7 +1166,7 @@ insert into t values (1); return 0; end /*!*/; -BEGIN +START TRANSACTION /*!*/; use `mysqltest`/*!*/; SET TIMESTAMP=t/*!*/; diff --git a/mysql-test/suite/engines/funcs/t/rpl_000015.test b/mysql-test/suite/engines/funcs/t/rpl_000015.test index 8d76fc674e5..8996affe667 100644 --- a/mysql-test/suite/engines/funcs/t/rpl_000015.test +++ b/mysql-test/suite/engines/funcs/t/rpl_000015.test @@ -11,39 +11,25 @@ save_master_pos; connection slave; --source include/stop_slave.inc reset slave; ---vertical_results ---replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 5 # 8 # 9 # 23 # 33 # -show slave status; +--let $status_items= Slave_IO_Running, Slave_SQL_Running, Last_SQL_Errno, Last_SQL_Error, Exec_Master_Log_Pos +--source include/show_slave_status.inc change master to master_host='127.0.0.1'; # The following needs to be cleaned up when change master is fixed ---vertical_results +--source include/show_slave_status.inc --replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 5 # 8 # 9 # 23 # 33 # -show slave status; ---replace_result $MASTER_MYPORT MASTER_PORT -eval change master to master_host='127.0.0.1',master_user='root', - master_password='',master_port=$MASTER_MYPORT; ---vertical_results ---replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 5 # 8 # 9 # 23 # 33 # -show slave status; +eval change master to master_host='127.0.0.1',master_user='root', +master_password='',master_port=$MASTER_MYPORT; --source include/start_slave.inc sync_with_master; ---vertical_results ---replace_result $MASTER_MYPORT MASTER_PORT ---replace_column 1 # 5 # 8 # 9 # 23 # 33 # ---replace_column 33 # -show slave status; +--source include/show_slave_status.inc + connection master; ---disable_warnings -drop table if exists t1; ---enable_warnings + create table t1 (n int, PRIMARY KEY(n)); insert into t1 values (10),(45),(90); --sync_slave_with_master -connection slave; + SELECT * FROM t1 ORDER BY n; connection master; SELECT * FROM t1 ORDER BY n; diff --git a/mysql-test/suite/engines/funcs/t/rpl_flushlog_loop.test b/mysql-test/suite/engines/funcs/t/rpl_flushlog_loop.test index 93207dfddf7..b4742246264 100644 --- a/mysql-test/suite/engines/funcs/t/rpl_flushlog_loop.test +++ b/mysql-test/suite/engines/funcs/t/rpl_flushlog_loop.test @@ -32,9 +32,6 @@ sleep 5; # # Show status of slave # ---replace_result $SLAVE_MYPORT SLAVE_PORT ---replace_column 1 # 8 # 9 # 16 # 23 # 33 # ---vertical_results -SHOW SLAVE STATUS; -stop slave; +--let $status_items= Slave_IO_Running, Slave_SQL_Running, Last_SQL_Errno, Last_SQL_Error, Exec_Master_Log_Pos +--source include/stop_slave.inc --source include/rpl_end.inc diff --git a/mysql-test/suite/engines/funcs/t/rpl_server_id1.test b/mysql-test/suite/engines/funcs/t/rpl_server_id1.test index a1425531b2c..1412db46d3a 100644 --- a/mysql-test/suite/engines/funcs/t/rpl_server_id1.test +++ b/mysql-test/suite/engines/funcs/t/rpl_server_id1.test @@ -12,9 +12,8 @@ reset master; --source include/stop_slave.inc --replace_result $SLAVE_MYPORT SLAVE_PORT eval change master to master_port=$SLAVE_MYPORT; ---replace_result $SLAVE_MYPORT SLAVE_PORT ---replace_column 16 # 18 # -show slave status; +--let $status_items= Slave_IO_Running, Slave_SQL_Running, Last_SQL_Errno, Last_SQL_Error, Exec_Master_Log_Pos +--source include/show_slave_status.inc start slave; insert into t1 values (1); diff --git a/mysql-test/suite/engines/funcs/t/rpl_switch_stm_row_mixed.test b/mysql-test/suite/engines/funcs/t/rpl_switch_stm_row_mixed.test index cd826c6be1e..2a16d90f9ad 100644 --- a/mysql-test/suite/engines/funcs/t/rpl_switch_stm_row_mixed.test +++ b/mysql-test/suite/engines/funcs/t/rpl_switch_stm_row_mixed.test @@ -1 +1 @@ ---source extra/rpl_tests/rpl_switch_stm_row_mixed.inc +--source suite/rpl/include/rpl_switch_stm_row_mixed.inc From 0f3045e4329d900cc95f84b5fe9ff5c9d96240c7 Mon Sep 17 00:00:00 2001 From: Alice Sherepa Date: Fri, 19 Mar 2021 17:29:18 +0100 Subject: [PATCH 5/5] fix for engines/funcs/rpl_sp.test --- .../engines/funcs/r/rpl_sp,myisam,mix.rdiff | 89 ++++++++++--------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff b/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff index 520a1e83e41..da41283e42f 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff +++ b/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff @@ -1,8 +1,11 @@ -@@ -126,11 +126,14 @@ +--- /home/alice/git/10.3/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.result~ 2021-03-19 17:27:12.935559866 +0100 ++++ /home/alice/git/10.3/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.reject 2021-03-19 17:27:14.071534938 +0100 +@@ -126,12 +126,15 @@ show warnings; Level Code Message Error 1062 Duplicate entry '20' for key 'a' +Warning 1196 Some non-transactional changed tables couldn't be rolled back + Note 4094 At line 4 in mysqltest1.foo4 select * from t2; a +20 @@ -11,9 +14,9 @@ a +20 select * from mysql.proc where name="foo4" and db='mysqltest1'; - db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 + db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 aggregate mysqltest1 foo4 PROCEDURE foo4 SQL CONTAINS_SQL YES DEFINER begin -@@ -170,20 +173,16 @@ +@@ -171,20 +174,16 @@ insert into t2 values(fn1(21)); select * from t1; a @@ -34,10 +37,10 @@ select * from t2; a 23 -@@ -290,13 +289,18 @@ - do fn1(100); +@@ -292,13 +291,18 @@ Warnings: Error 1062 Duplicate entry '100' for key 'a' + Note 4094 At line 3 in mysqltest1.fn1 +Warning 1196 Some non-transactional changed tables couldn't be rolled back select fn1(20); ERROR 23000: Duplicate entry '20' for key 'a' @@ -53,7 +56,7 @@ connection con1; create trigger trg before insert on t1 for each row set new.a= 10; ERROR 42000: TRIGGER command denied to user 'zedjzlcsjhd'@'localhost' for table 't1' -@@ -470,13 +474,13 @@ +@@ -472,13 +476,13 @@ end master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8)) @@ -70,7 +73,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`() select * from mysqltest1.t1 -@@ -507,24 +511,24 @@ +@@ -509,24 +513,24 @@ end master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(3) @@ -101,7 +104,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; alter table t2 add unique (a) master-bin.000001 # Gtid # # GTID #-#-# -@@ -535,6 +539,9 @@ +@@ -537,6 +541,9 @@ begin insert into t2 values(20),(20); end @@ -111,7 +114,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo4 master-bin.000001 # Gtid # # GTID #-#-# -@@ -555,10 +562,10 @@ +@@ -557,10 +564,10 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20) @@ -124,7 +127,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; drop function fn1 master-bin.000001 # Gtid # # GTID #-#-# -@@ -569,10 +576,10 @@ +@@ -571,10 +578,10 @@ end master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; delete from t1 @@ -137,7 +140,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11) NO SQL -@@ -587,7 +594,7 @@ +@@ -589,7 +596,7 @@ end master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; delete from t2 @@ -146,7 +149,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; alter table t2 add unique (a) master-bin.000001 # Gtid # # GTID #-#-# -@@ -599,21 +606,27 @@ +@@ -601,21 +608,27 @@ return 10; end master-bin.000001 # Gtid # # BEGIN GTID #-#-# @@ -178,7 +181,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`() READS SQL DATA -@@ -645,7 +658,7 @@ +@@ -647,7 +660,7 @@ master-bin.000001 # Query # # use `test`; create table t1 (a int) master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `test`; insert into t1 (a) values (f1()) @@ -187,7 +190,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `test`; drop view v1 master-bin.000001 # Gtid # # GTID #-#-# -@@ -661,7 +674,7 @@ +@@ -663,7 +676,7 @@ INSERT INTO t1 VALUES(arg) master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci')) @@ -196,7 +199,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `test`; DROP PROCEDURE p1 master-bin.000001 # Gtid # # GTID #-#-# -@@ -695,7 +708,7 @@ +@@ -697,7 +710,7 @@ begin end master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `mysqltest2`; insert into t values ( 1 ) @@ -205,7 +208,7 @@ master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Query # # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) begin -@@ -704,7 +717,7 @@ +@@ -706,7 +719,7 @@ end master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Query # # use `mysqltest`; SELECT `mysqltest2`.`f1`() @@ -214,7 +217,7 @@ connection slave; set @@global.log_bin_trust_function_creators= @old_log_bin_trust_function_creators; connection master; -@@ -799,19 +812,25 @@ +@@ -801,19 +814,25 @@ SET TIMESTAMP=t/*!*/; insert into t1 values ( NAME_CONST('b',8)) /*!*/; @@ -222,7 +225,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values (unix_timestamp()) @@ -231,7 +234,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete from t1 @@ -243,7 +246,7 @@ SET TIMESTAMP=t/*!*/; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`() select * from mysqltest1.t1 -@@ -856,21 +875,27 @@ +@@ -858,21 +877,27 @@ SET TIMESTAMP=t/*!*/; insert into t2 values(3) /*!*/; @@ -251,7 +254,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=0/*!*/; @@ -261,7 +264,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=1411383296/*!*/; @@ -274,7 +277,7 @@ SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=0/*!*/; alter procedure foo4 sql security invoker -@@ -881,20 +906,26 @@ +@@ -883,20 +908,26 @@ SET @@session.sql_mode=1411383296/*!*/; insert into t2 values(3) /*!*/; @@ -282,7 +285,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values (5) @@ -291,7 +294,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=0/*!*/; @@ -304,11 +307,11 @@ SET TIMESTAMP=t/*!*/; alter table t2 add unique (a) /*!*/; -@@ -908,6 +939,14 @@ +@@ -910,6 +941,14 @@ insert into t2 values(20),(20); end /*!*/; -+BEGIN ++START TRANSACTION +/*!*/; +SET TIMESTAMP=t/*!*/; +insert into t2 values(20),(20) @@ -319,7 +322,7 @@ SET TIMESTAMP=t/*!*/; drop procedure foo4 /*!*/; -@@ -941,13 +980,17 @@ +@@ -943,13 +982,17 @@ SET TIMESTAMP=t/*!*/; SELECT `mysqltest1`.`fn1`(20) /*!*/; @@ -327,7 +330,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t2 values(fn1(21)) @@ -339,7 +342,7 @@ SET TIMESTAMP=t/*!*/; drop function fn1 /*!*/; -@@ -963,13 +1006,17 @@ +@@ -965,13 +1008,17 @@ SET TIMESTAMP=t/*!*/; delete from t1 /*!*/; @@ -347,7 +350,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; insert into t1 values(fn1()) @@ -359,7 +362,7 @@ SET TIMESTAMP=t/*!*/; SET @@session.sql_mode=1411383296/*!*/; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11) -@@ -991,7 +1038,9 @@ +@@ -993,7 +1040,9 @@ SET TIMESTAMP=t/*!*/; delete from t2 /*!*/; @@ -370,8 +373,8 @@ SET TIMESTAMP=t/*!*/; alter table t2 add unique (a) /*!*/; -@@ -1008,9 +1057,27 @@ - BEGIN +@@ -1010,9 +1059,27 @@ + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; +SELECT `mysqltest1`.`fn1`(100) @@ -379,7 +382,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; -+BEGIN ++START TRANSACTION +/*!*/; +SET TIMESTAMP=t/*!*/; +SELECT `mysqltest1`.`fn1`(20) @@ -387,7 +390,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; -+BEGIN ++START TRANSACTION +/*!*/; +SET TIMESTAMP=t/*!*/; delete from t1 @@ -399,7 +402,7 @@ SET TIMESTAMP=t/*!*/; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10 /*!*/; -@@ -1019,13 +1086,17 @@ +@@ -1021,13 +1088,17 @@ SET TIMESTAMP=t/*!*/; insert into t1 values (1) /*!*/; @@ -407,7 +410,7 @@ +SET TIMESTAMP=t/*!*/; +COMMIT +/*!*/; - BEGIN + START TRANSACTION /*!*/; SET TIMESTAMP=t/*!*/; delete from t1 @@ -419,7 +422,7 @@ SET TIMESTAMP=t/*!*/; drop trigger trg /*!*/; -@@ -1034,7 +1105,9 @@ +@@ -1036,7 +1107,9 @@ SET TIMESTAMP=t/*!*/; insert into t1 values (1) /*!*/; @@ -430,7 +433,7 @@ SET TIMESTAMP=t/*!*/; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`() READS SQL DATA -@@ -1079,7 +1152,9 @@ +@@ -1081,7 +1154,9 @@ SET TIMESTAMP=t/*!*/; insert into t1 (a) values (f1()) /*!*/; @@ -441,7 +444,7 @@ SET TIMESTAMP=t/*!*/; drop view v1 /*!*/; -@@ -1104,7 +1179,9 @@ +@@ -1106,7 +1181,9 @@ SET TIMESTAMP=t/*!*/; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci')) /*!*/; @@ -452,7 +455,7 @@ SET TIMESTAMP=t/*!*/; DROP PROCEDURE p1 /*!*/; -@@ -1156,7 +1233,9 @@ +@@ -1158,7 +1235,9 @@ SET TIMESTAMP=t/*!*/; insert into t values ( 1 ) /*!*/; @@ -463,7 +466,7 @@ SET TIMESTAMP=t/*!*/; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) begin -@@ -1170,7 +1249,9 @@ +@@ -1172,7 +1251,9 @@ SET TIMESTAMP=t/*!*/; SELECT `mysqltest2`.`f1`() /*!*/;