mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge next-mr -> next-4284.
mysql-test/t/disabled.def: Restore disabled ssl tests: SSL certificates were updated. Disable sp_sync.test, the test case can't work in next-4284. mysql-test/t/partition_innodb.test: Disable parsing of the test case for Bug#47343, the test can not work in next-4284. mysql-test/t/ps_ddl.test: Update results (CREATE TABLE IF NOT EXISTS takes into account existence of the temporary table).
This commit is contained in:
@ -344,30 +344,14 @@ BEGIN;
|
||||
--eval INSERT INTO t1 (a, data) VALUES (1, $data);
|
||||
--eval INSERT INTO t1 (a, data) VALUES (2, $data);
|
||||
--eval INSERT INTO t2 (a, data) VALUES (3, $data);
|
||||
if (`SELECT @@binlog_format = 'STATEMENT'`)
|
||||
{
|
||||
--error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
|
||||
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
|
||||
}
|
||||
if (`SELECT @@binlog_format = 'ROW' || @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
|
||||
}
|
||||
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
|
||||
--error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
|
||||
--eval INSERT INTO t1 (a, data) VALUES (5, $data);
|
||||
--error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
|
||||
--eval INSERT INTO t1 (a, data) VALUES (6, $data);
|
||||
--error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
|
||||
--eval INSERT INTO t1 (a, data) VALUES (7, $data);
|
||||
if (`SELECT @@binlog_format = 'STATEMENT'`)
|
||||
{
|
||||
--error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
|
||||
--eval UPDATE t2 SET data= CONCAT($data, $data);
|
||||
}
|
||||
if (`SELECT @@binlog_format = 'ROW' || @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
--eval UPDATE t2 SET data= CONCAT($data, $data);
|
||||
}
|
||||
--eval UPDATE t2 SET data= CONCAT($data, $data);
|
||||
--eval INSERT INTO t1 (a, data) VALUES (8, 's');
|
||||
--eval INSERT INTO t1 (a, data) VALUES (9, 's');
|
||||
--eval INSERT INTO t2 (a, data) VALUES (10, 's');
|
||||
@ -380,31 +364,12 @@ BEGIN;
|
||||
--eval INSERT INTO t1 (a, data) VALUES (15, $data);
|
||||
--eval INSERT INTO t1 (a, data) VALUES (16, $data);
|
||||
--eval INSERT INTO t2 (a, data) VALUES (17, $data);
|
||||
if (`SELECT @@binlog_format = 'STATEMENT'`)
|
||||
{
|
||||
--error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
|
||||
--eval INSERT INTO t1 (a, data) VALUES (18, $data);
|
||||
}
|
||||
if (`SELECT @@binlog_format = 'ROW' || @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
--eval INSERT INTO t1 (a, data) VALUES (18, $data);
|
||||
}
|
||||
--eval INSERT INTO t1 (a, data) VALUES (18, $data);
|
||||
--error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
|
||||
--eval INSERT INTO t1 (a, data) VALUES (19, $data);
|
||||
--enable_query_log
|
||||
COMMIT;
|
||||
|
||||
if (`SELECT @@binlog_format = 'STATEMENT'`)
|
||||
{
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
|
||||
START SLAVE SQL_THREAD;
|
||||
--source include/wait_for_slave_sql_to_start.inc
|
||||
connection master;
|
||||
}
|
||||
|
||||
let $diff_statement= SELECT * FROM t1;
|
||||
--source include/diff_master_slave.inc
|
||||
|
||||
|
@ -219,13 +219,12 @@ while (`SELECT $ddl_cases >= 1`)
|
||||
# in the binary log:
|
||||
#
|
||||
# 1: DDL EVENT which triggered the previous commmit.
|
||||
# 2: COMMIT
|
||||
# 3: BEGIN
|
||||
# 4: TABLE MAP EVENT
|
||||
# 5: TABLE MAP EVENT (ndb_apply_status)
|
||||
# 2: BEGIN
|
||||
# 3: TABLE MAP EVENT
|
||||
# 4: TABLE MAP EVENT (ndb_apply_status)
|
||||
# 5: ROW EVENT
|
||||
# 6: ROW EVENT
|
||||
# 7: ROW EVENT
|
||||
# 8: COMMIT
|
||||
# 7: COMMIT
|
||||
#
|
||||
if (`SELECT '$engine' = 'NDB' && @@binlog_format != 'ROW'`)
|
||||
{
|
||||
@ -362,8 +361,11 @@ while (`SELECT $ddl_cases >= 1`)
|
||||
# does not commit the current transaction.
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: INSERT
|
||||
# 3: CREATE TEMPORARY
|
||||
# 2: CREATE TEMPORARY
|
||||
# 3: COMMIT
|
||||
# 4: BEGIN
|
||||
# 5: INSERT
|
||||
# 6: COMMIT
|
||||
#
|
||||
# In RBR the transaction is not committed either and the statement is not
|
||||
# written to the binary log:
|
||||
@ -371,10 +373,11 @@ while (`SELECT $ddl_cases >= 1`)
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: COMMIT
|
||||
#
|
||||
if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
|
||||
if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'` )
|
||||
{
|
||||
let $commit_event_row_number= 4;
|
||||
let $commit_event_row_number= 6;
|
||||
}
|
||||
#
|
||||
# In NDB (RBR mode), the commit event is the sixth event
|
||||
@ -482,9 +485,14 @@ while (`SELECT $ddl_cases >= 1`)
|
||||
# In SBR and MIXED modes, the DDL statement is written to the binary log
|
||||
# but does not commit the current transaction:
|
||||
#
|
||||
# In SBR, we have what follows:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: INSERT
|
||||
# 3: DROP TEMPORARY
|
||||
# 2: DROP TEMPORARY
|
||||
# 3: COMMIT
|
||||
# 4: BEGIN
|
||||
# 5: INSERT
|
||||
# 6: COMMIT
|
||||
#
|
||||
# In RBR the transaction is not committed either and the statement is not
|
||||
# written to the binary log:
|
||||
@ -492,8 +500,13 @@ while (`SELECT $ddl_cases >= 1`)
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: COMMIT
|
||||
#
|
||||
if (`select @@binlog_format = 'STATEMENT'`)
|
||||
{
|
||||
let $commit_event_row_number= 6;
|
||||
}
|
||||
if (`select @@binlog_format = 'ROW'`)
|
||||
{
|
||||
let $commit_event_row_number= 4;
|
||||
}
|
||||
@ -503,6 +516,7 @@ while (`SELECT $ddl_cases >= 1`)
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: DROP TEMPORARY table IF EXISTS
|
||||
# 5: COMMIT
|
||||
#
|
||||
if (`select @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
|
@ -237,4 +237,18 @@ source include/diff_tables.inc;
|
||||
|
||||
-- sync_slave_with_master
|
||||
|
||||
# BUG#49479: LOAD DATA INFILE is binlogged without escaping field names
|
||||
-- source include/master-slave-reset.inc
|
||||
-- connection master
|
||||
use test;
|
||||
CREATE TABLE t1 (`key` TEXT, `text` TEXT);
|
||||
|
||||
LOAD DATA INFILE '../../std_data/loaddata2.dat' REPLACE INTO TABLE `t1` FIELDS TERMINATED BY ',';
|
||||
SELECT * FROM t1;
|
||||
|
||||
-- sync_slave_with_master
|
||||
-- connection master
|
||||
DROP TABLE t1;
|
||||
-- sync_slave_with_master
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -1767,7 +1767,10 @@ sync_slave_with_master;
|
||||
|
||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-nmt-master.sql
|
||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-nmt-slave.sql
|
||||
--diff_files $MYSQLTEST_VARDIR/tmp/test-nmt-master.sql $MYSQLTEST_VARDIR/tmp/test-nmt-slave.sql
|
||||
if (`select @@session.binlog_format != 'STATEMENT'`)
|
||||
{
|
||||
--diff_files $MYSQLTEST_VARDIR/tmp/test-nmt-master.sql $MYSQLTEST_VARDIR/tmp/test-nmt-slave.sql
|
||||
}
|
||||
|
||||
--echo ###################################################################################
|
||||
--echo # CLEAN
|
||||
|
@ -15,6 +15,8 @@
|
||||
# Vs slave. #
|
||||
#############################################################################
|
||||
|
||||
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
--disable_warnings
|
||||
@ -39,12 +41,16 @@ RETURN tmp;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
--disable_warnings
|
||||
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
||||
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
||||
--enable_warnings
|
||||
|
||||
SET AUTOCOMMIT=0;
|
||||
START TRANSACTION;
|
||||
--disable_warnings
|
||||
INSERT INTO test.t1 VALUES (null,test.f1());
|
||||
--enable_warnings
|
||||
ROLLBACK;
|
||||
SET AUTOCOMMIT=1;
|
||||
|
||||
|
86
mysql-test/extra/rpl_tests/rpl_set_null.test
Normal file
86
mysql-test/extra/rpl_tests/rpl_set_null.test
Normal file
@ -0,0 +1,86 @@
|
||||
# Both of the following tests check that comparison of binlog BI
|
||||
# against SE record will not fail due to remains from previous values
|
||||
# in the SE record (before a given field was set to null).
|
||||
#
|
||||
# In MIXED mode:
|
||||
# - Insert and update are executed as statements
|
||||
# - Delete is executed as a row event
|
||||
# - Assertion: checks that comparison will not fail because the update
|
||||
# statement will clear the record contents for the nulled
|
||||
# field. If data was not cleared, some engines may keep
|
||||
# the value and return it later as garbage - despite the
|
||||
# fact that field is null. This may cause slave to
|
||||
# falsely fail in the comparison (memcmp would fail
|
||||
# because of "garbage" in record data).
|
||||
#
|
||||
# In ROW mode:
|
||||
# - Insert, update and delete are executed as row events.
|
||||
# - Assertion: checks that comparison will not fail because the update
|
||||
# rows event will clear the record contents before
|
||||
# feeding the new value to the SE. This protects against
|
||||
# SEs that do not clear record contents when storing
|
||||
# nulled fields. If the engine did not clear the data it
|
||||
# would cause slave to falsely fail in the comparison
|
||||
# (memcmp would fail because of "garbage" in record
|
||||
# data). This scenario is pretty much the same described
|
||||
# above in MIXED mode, but checks different execution
|
||||
# path in the slave.
|
||||
|
||||
# BUG#49481: RBR: MyISAM and bit fields may cause slave to stop on
|
||||
# delete cant find record
|
||||
|
||||
-- source include/master-slave-reset.inc
|
||||
|
||||
-- connection master
|
||||
-- eval CREATE TABLE t1 (c1 BIT, c2 INT) Engine=$engine
|
||||
INSERT INTO `t1` VALUES ( 1, 1 );
|
||||
UPDATE t1 SET c1=NULL where c2=1;
|
||||
-- sync_slave_with_master
|
||||
|
||||
-- let $diff_table_1=master:test.t1
|
||||
-- let $diff_table_2=slave:test.t1
|
||||
-- source include/diff_tables.inc
|
||||
|
||||
-- connection master
|
||||
# triggers switch to row mode when on mixed
|
||||
DELETE FROM t1 WHERE c2=1 LIMIT 1;
|
||||
-- sync_slave_with_master
|
||||
|
||||
-- let $diff_table_1=master:test.t1
|
||||
-- let $diff_table_2=slave:test.t1
|
||||
-- source include/diff_tables.inc
|
||||
|
||||
-- connection master
|
||||
DROP TABLE t1;
|
||||
-- sync_slave_with_master
|
||||
|
||||
-- source include/master-slave-reset.inc
|
||||
|
||||
-- connection master
|
||||
|
||||
# BUG#49482: RBR: Replication may break on deletes when MyISAM tables
|
||||
# + char field are used
|
||||
|
||||
-- eval CREATE TABLE t1 (c1 CHAR) Engine=$engine
|
||||
|
||||
INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ;
|
||||
SELECT * FROM t1;
|
||||
UPDATE t1 SET c1=NULL WHERE c1='w';
|
||||
-- sync_slave_with_master
|
||||
|
||||
-- let $diff_table_1=master:test.t1
|
||||
-- let $diff_table_2=slave:test.t1
|
||||
-- source include/diff_tables.inc
|
||||
|
||||
-- connection master
|
||||
# triggers switch to row mode when on mixed
|
||||
DELETE FROM t1 LIMIT 2;
|
||||
-- sync_slave_with_master
|
||||
|
||||
-- let $diff_table_1=master:test.t1
|
||||
-- let $diff_table_2=slave:test.t1
|
||||
-- source include/diff_tables.inc
|
||||
|
||||
-- connection master
|
||||
DROP TABLE t1;
|
||||
-- sync_slave_with_master
|
159
mysql-test/extra/rpl_tests/rpl_tmp_table_and_DDL.test
Normal file
159
mysql-test/extra/rpl_tests/rpl_tmp_table_and_DDL.test
Normal file
@ -0,0 +1,159 @@
|
||||
#
|
||||
# This test verify if executing DDL statement before trying to manipulate
|
||||
# a temporary table causes row-based replication to break with error 'table
|
||||
# does not exist'.
|
||||
#
|
||||
|
||||
# CREATE TABLE when a temporary table is open.
|
||||
CREATE TEMPORARY TABLE t1 (a INT);
|
||||
EVAL CREATE TABLE t2 (a INT, b INT) ENGINE= $ENGINE_TYPE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# CREATE EVENT when a temporary table is open.
|
||||
CREATE EVENT e1 ON SCHEDULE EVERY 10 HOUR DO SELECT 1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# ALTER EVENT when a temporary table is open.
|
||||
ALTER EVENT e1 ON SCHEDULE EVERY 20 HOUR DO SELECT 1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# DROP EVENT when a temporary table is open.
|
||||
DROP EVENT IF EXISTS e1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# CREATE PROCEDURE when a temporary table is open.
|
||||
CREATE PROCEDURE p1() SELECT 1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# Alter PROCEDURE when a temporary table is open.
|
||||
ALTER PROCEDURE p1 SQL SECURITY INVOKER;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# CREATE FUNCTION when a temporary table is open.
|
||||
CREATE FUNCTION f1() RETURNS INT RETURN 123;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# ALTER FUNCTION when a temporary table is open.
|
||||
ALTER FUNCTION f1 SQL SECURITY INVOKER;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# CREATE DATABASE when a temporary table is open.
|
||||
CREATE DATABASE mysqltest1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# DROP DATABASE when a temporary table is open.
|
||||
DROP DATABASE mysqltest1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# CREATE USER when a temporary table is open.
|
||||
CREATE USER test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT select on table to user when a temporary table is open.
|
||||
GRANT SELECT ON t2 TO test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT all on function to user when a temporary table is open.
|
||||
GRANT ALL ON f1 TO test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT all on procedure to user when a temporary table is open.
|
||||
GRANT ALL ON p1 TO test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT usage on *.* to user when a temporary table is open.
|
||||
GRANT USAGE ON *.* TO test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE ALL PRIVILEGES on function to user when a temporary table is open.
|
||||
REVOKE ALL PRIVILEGES ON f1 FROM test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE ALL PRIVILEGES on procedure to user when a temporary table is open.
|
||||
REVOKE ALL PRIVILEGES ON p1 FROM test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE ALL PRIVILEGES on table to user when a temporary table is open.
|
||||
REVOKE ALL PRIVILEGES ON t2 FROM test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE usage on *.* from user when a temporary table is open.
|
||||
REVOKE USAGE ON *.* FROM test_1@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# RENAME USER when a temporary table is open.
|
||||
RENAME USER test_1@localhost TO test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# DROP USER when a temporary table is open.
|
||||
DROP USER test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# Test ACL statement in sub statement
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE p2()
|
||||
BEGIN
|
||||
# CREATE USER when a temporary table is open.
|
||||
CREATE TEMPORARY TABLE t3 (a INT);
|
||||
CREATE USER test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT select on table to user when a temporary table is open.
|
||||
GRANT SELECT ON t2 TO test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT all on function to user when a temporary table is open.
|
||||
GRANT ALL ON f1 TO test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT all on procedure to user when a temporary table is open.
|
||||
GRANT ALL ON p1 TO test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# GRANT usage on *.* to user when a temporary table is open.
|
||||
GRANT USAGE ON *.* TO test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE ALL PRIVILEGES on function to user when a temporary table is open.
|
||||
REVOKE ALL PRIVILEGES ON f1 FROM test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE ALL PRIVILEGES on procedure to user when a temporary table is open.
|
||||
REVOKE ALL PRIVILEGES ON p1 FROM test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE ALL PRIVILEGES on table to user when a temporary table is open.
|
||||
REVOKE ALL PRIVILEGES ON t2 FROM test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# REVOKE usage on *.* from user when a temporary table is open.
|
||||
REVOKE USAGE ON *.* FROM test_2@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# RENAME USER when a temporary table is open.
|
||||
RENAME USER test_2@localhost TO test_3@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# DROP USER when a temporary table is open.
|
||||
DROP USER test_3@localhost;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
DROP TEMPORARY TABLE t3;
|
||||
END |
|
||||
DELIMITER ;|
|
||||
|
||||
# DROP PROCEDURE when a temporary table is open.
|
||||
DROP PROCEDURE p1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
DROP PROCEDURE p2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# DROP FUNCTION when a temporary table is open.
|
||||
DROP FUNCTION f1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# DROP TABLE when a temporary table is open.
|
||||
DROP TABLE t2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
DROP TEMPORARY TABLE t1;
|
||||
|
Reference in New Issue
Block a user