22 changed files with 1093 additions and 63 deletions
-
4mysql-test/lib/My/Handles.pm
-
227mysql-test/suite/innodb/r/innodb-read-view.result
-
214mysql-test/suite/innodb/t/innodb-read-view.test
-
12mysql-test/suite/mariabackup/disabled.def
-
4mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result
-
4mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result
-
12mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result
-
12mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result
-
4mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result
-
4mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result
-
10mysql-test/suite/rpl/r/rpl_row_colSize.result
-
164mysql-test/suite/rpl/r/rpl_row_type_conv_err_msg.result
-
356mysql-test/suite/rpl/t/rpl_row_type_conv_err_msg.test
-
45sql/field.cc
-
3sql/field.h
-
49sql/rpl_utility.cc
-
2sql/share/errmsg-utf8.txt
-
3storage/innobase/lock/lock0lock.cc
-
7storage/innobase/trx/trx0trx.cc
-
4storage/tokudb/mysql-test/rpl/r/rpl_extra_col_master_tokudb.result
-
12storage/tokudb/mysql-test/rpl/r/rpl_extra_col_slave_tokudb.result
-
4storage/tokudb/mysql-test/rpl/r/rpl_row_basic_3tokudb.result
@ -0,0 +1,227 @@ |
|||
CREATE TABLE t1 (c1 INT , c2 CHAR(10), PRIMARY KEY (c1)) ENGINE = InnoDB; |
|||
INSERT INTO t1 VALUES(0, "0"); |
|||
INSERT INTO t1 VALUES(1, "1"); |
|||
INSERT INTO t1 VALUES(2, "2"); |
|||
INSERT INTO t1 VALUES(3, "3"); |
|||
CREATE TABLE t2 (c1 INT , c2 CHAR(10), PRIMARY KEY (c1)) ENGINE = InnoDB; |
|||
INSERT INTO t2 VALUES(0, "a"); |
|||
INSERT INTO t2 VALUES(1, "b"); |
|||
INSERT INTO t2 VALUES(2, "c"); |
|||
INSERT INTO t2 VALUES(3, "d"); |
|||
connect con1,localhost,root,,; |
|||
connect con2,localhost,root,,; |
|||
connection con1; |
|||
'T1' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t2; |
|||
c1 c2 |
|||
0 a |
|||
1 b |
|||
2 c |
|||
3 d |
|||
connection default; |
|||
'T2' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
c1 c2 |
|||
0 0 |
|||
1 1 |
|||
2 2 |
|||
3 3 |
|||
connection con2; |
|||
'T3' |
|||
SET AUTOCOMMIT=0; |
|||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
c1 c2 |
|||
0 0 |
|||
1 1 |
|||
2 2 |
|||
3 3 |
|||
SELECT * FROM t2; |
|||
c1 c2 |
|||
0 a |
|||
1 b |
|||
2 c |
|||
3 d |
|||
connection con1; |
|||
'T1' |
|||
UPDATE t2 SET c1 = c1 + 100; |
|||
SELECT * FROM t2; |
|||
c1 c2 |
|||
100 a |
|||
101 b |
|||
102 c |
|||
103 d |
|||
COMMIT; |
|||
connection default; |
|||
'T2' |
|||
UPDATE t1 SET c1 = c1 + 100; |
|||
SELECT * FROM t1; |
|||
c1 c2 |
|||
100 0 |
|||
101 1 |
|||
102 2 |
|||
103 3 |
|||
COMMIT; |
|||
connection con2; |
|||
'T3' |
|||
SET DEBUG_SYNC='row_search_for_mysql_before_return WAIT_FOR waiting1'; |
|||
SELECT * FROM t1;; |
|||
connection default; |
|||
'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
'Signalled T3' |
|||
connection con2; |
|||
'T3' |
|||
c1 c2 |
|||
0 0 |
|||
1 1 |
|||
2 2 |
|||
3 3 |
|||
connection con2; |
|||
'T3' |
|||
SET DEBUG_SYNC='row_search_for_mysql_before_return WAIT_FOR waiting1'; |
|||
SELECT * FROM t2;; |
|||
connection default; |
|||
'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
'Signalled T3' |
|||
connection con2; |
|||
'T3' |
|||
c1 c2 |
|||
0 a |
|||
1 b |
|||
2 c |
|||
3 d |
|||
connection default; |
|||
disconnect con1; |
|||
disconnect con2; |
|||
connect con1,localhost,root,,; |
|||
connect con2,localhost,root,,; |
|||
connection con1; |
|||
'T1' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
c1 c2 |
|||
100 0 |
|||
101 1 |
|||
102 2 |
|||
103 3 |
|||
connection default; |
|||
'T2' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t2; |
|||
c1 c2 |
|||
100 a |
|||
101 b |
|||
102 c |
|||
103 d |
|||
UPDATE t2 SET c1 = c1 + 100; |
|||
SELECT * FROM t2; |
|||
c1 c2 |
|||
200 a |
|||
201 b |
|||
202 c |
|||
203 d |
|||
COMMIT; |
|||
connection con2; |
|||
'T3' |
|||
SET AUTOCOMMIT=0; |
|||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
c1 c2 |
|||
100 0 |
|||
101 1 |
|||
102 2 |
|||
103 3 |
|||
SELECT * FROM t2; |
|||
c1 c2 |
|||
200 a |
|||
201 b |
|||
202 c |
|||
203 d |
|||
connection con1; |
|||
'T1' |
|||
UPDATE t1 SET c1 = c1 + 100; |
|||
SELECT * FROM t1; |
|||
c1 c2 |
|||
200 0 |
|||
201 1 |
|||
202 2 |
|||
203 3 |
|||
COMMIT; |
|||
connection con2; |
|||
'T3' |
|||
SET DEBUG_SYNC='row_select_wait WAIT_FOR waiting1'; |
|||
SELECT * FROM t1;; |
|||
connection con1; |
|||
'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
'Signalled T3' |
|||
connection con2; |
|||
'T3' |
|||
c1 c2 |
|||
100 0 |
|||
101 1 |
|||
102 2 |
|||
103 3 |
|||
connection con2; |
|||
'T3' |
|||
SET DEBUG_SYNC='row_select_wait WAIT_FOR waiting1'; |
|||
SELECT * FROM t2;; |
|||
connection default; |
|||
'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
'Signalled T3' |
|||
connection con2; |
|||
'T3' |
|||
c1 c2 |
|||
200 a |
|||
201 b |
|||
202 c |
|||
203 d |
|||
connection default; |
|||
disconnect con1; |
|||
disconnect con2; |
|||
DROP TABLE t1; |
|||
DROP TABLE t2; |
|||
# |
|||
# Bug 21433768: NON-REPEATABLE READ WITH REPEATABLE READ ISOLATION |
|||
# |
|||
connect con1,localhost,root,,; |
|||
# connection con1 |
|||
CREATE TABLE t1(col1 INT PRIMARY KEY, col2 INT) ENGINE = InnoDB; |
|||
INSERT INTO t1 values (1, 0), (2, 0); |
|||
SELECT * FROM t1 ORDER BY col1; |
|||
col1 col2 |
|||
1 0 |
|||
2 0 |
|||
START TRANSACTION; |
|||
UPDATE t1 SET col2 = 100; |
|||
SET DEBUG_SYNC = 'after_trx_committed_in_memory SIGNAL s1 WAIT_FOR s2'; |
|||
COMMIT;; |
|||
connection default; |
|||
# connection default |
|||
SET DEBUG_SYNC = 'now WAIT_FOR s1'; |
|||
UPDATE t1 SET col2 = col2 + 10 where col1 = 1; |
|||
COMMIT; |
|||
SELECT * FROM t1 ORDER BY col1; |
|||
col1 col2 |
|||
1 110 |
|||
2 100 |
|||
SET DEBUG_SYNC = 'now SIGNAL s2'; |
|||
connection con1; |
|||
# connection con1 |
|||
# reap COMMIT for con1 |
|||
connection default; |
|||
# connection default |
|||
disconnect con1; |
|||
DROP TABLE t1; |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
@ -0,0 +1,214 @@ |
|||
# DEBUG_SYNC must be compiled in. |
|||
--source include/have_debug_sync.inc |
|||
|
|||
# We need to test the use case: |
|||
# a. Create a transaction T1 that will be promoted to RW. |
|||
# b. Create a transaction T2 that will be promoted to RW. |
|||
# a. Create a RO transaction T3 |
|||
# d. T3 does a select - creates a read view that doesn't include T1 and T2 |
|||
# e. T1 & T2 do some updates - this promotes T1 & T2 to RW transactions |
|||
# f. T1 & T2 Commit |
|||
# g. T3 Does a select - it should not see the changes of T1 & T2 |
|||
|
|||
--source include/have_innodb.inc |
|||
--source include/count_sessions.inc |
|||
|
|||
CREATE TABLE t1 (c1 INT , c2 CHAR(10), PRIMARY KEY (c1)) ENGINE = InnoDB; |
|||
INSERT INTO t1 VALUES(0, "0"); |
|||
INSERT INTO t1 VALUES(1, "1"); |
|||
INSERT INTO t1 VALUES(2, "2"); |
|||
INSERT INTO t1 VALUES(3, "3"); |
|||
|
|||
CREATE TABLE t2 (c1 INT , c2 CHAR(10), PRIMARY KEY (c1)) ENGINE = InnoDB; |
|||
INSERT INTO t2 VALUES(0, "a"); |
|||
INSERT INTO t2 VALUES(1, "b"); |
|||
INSERT INTO t2 VALUES(2, "c"); |
|||
INSERT INTO t2 VALUES(3, "d"); |
|||
|
|||
--connect (con1,localhost,root,,) |
|||
--connect (con2,localhost,root,,) |
|||
|
|||
connection con1; |
|||
--echo 'T1' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t2; |
|||
|
|||
connection default; |
|||
--echo 'T2' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
SET AUTOCOMMIT=0; |
|||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
SELECT * FROM t2; |
|||
|
|||
connection con1; |
|||
--echo 'T1' |
|||
UPDATE t2 SET c1 = c1 + 100; |
|||
SELECT * FROM t2; |
|||
COMMIT; |
|||
|
|||
connection default; |
|||
--echo 'T2' |
|||
UPDATE t1 SET c1 = c1 + 100; |
|||
SELECT * FROM t1; |
|||
COMMIT; |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
SET DEBUG_SYNC='row_search_for_mysql_before_return WAIT_FOR waiting1'; |
|||
--send SELECT * FROM t1; |
|||
|
|||
connection default; |
|||
--echo 'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
--echo 'Signalled T3' |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
reap; |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
SET DEBUG_SYNC='row_search_for_mysql_before_return WAIT_FOR waiting1'; |
|||
--send SELECT * FROM t2; |
|||
|
|||
connection default; |
|||
--echo 'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
--echo 'Signalled T3' |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
reap; |
|||
|
|||
connection default; |
|||
disconnect con1; |
|||
disconnect con2; |
|||
|
|||
# We need to test the use case: |
|||
# a. Create a transaction T1 that will be promoted to RW. |
|||
# b. Create a transaction T2 that will be promoted to RW. |
|||
# c. T2 does some updates - this promotes T2 to RW transactions |
|||
# d. T2 Commits |
|||
# e. Create a RO transaction T3 |
|||
# f. T3 does a select - creates a read view that doesn't include T1 |
|||
# g. T1 does some updates - this promotes T1 to RW transactions |
|||
# h. T1 Commits |
|||
# i. T3 Does a select - it should not see the changes made by T1 but should |
|||
# see the changes by T2 |
|||
|
|||
--connect (con1,localhost,root,,) |
|||
--connect (con2,localhost,root,,) |
|||
|
|||
connection con1; |
|||
--echo 'T1' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
|
|||
connection default; |
|||
--echo 'T2' |
|||
SET AUTOCOMMIT=0; |
|||
BEGIN; |
|||
SELECT * FROM t2; |
|||
UPDATE t2 SET c1 = c1 + 100; |
|||
SELECT * FROM t2; |
|||
COMMIT; |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
SET AUTOCOMMIT=0; |
|||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; |
|||
BEGIN; |
|||
SELECT * FROM t1; |
|||
SELECT * FROM t2; |
|||
|
|||
connection con1; |
|||
--echo 'T1' |
|||
UPDATE t1 SET c1 = c1 + 100; |
|||
SELECT * FROM t1; |
|||
COMMIT; |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
SET DEBUG_SYNC='row_select_wait WAIT_FOR waiting1'; |
|||
--send SELECT * FROM t1; |
|||
|
|||
connection con1; |
|||
--echo 'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
--echo 'Signalled T3' |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
reap; |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
SET DEBUG_SYNC='row_select_wait WAIT_FOR waiting1'; |
|||
--send SELECT * FROM t2; |
|||
|
|||
connection default; |
|||
--echo 'T2' |
|||
SET DEBUG_SYNC='now SIGNAL waiting1'; |
|||
--echo 'Signalled T3' |
|||
|
|||
connection con2; |
|||
--echo 'T3' |
|||
reap; |
|||
|
|||
connection default; |
|||
disconnect con1; |
|||
disconnect con2; |
|||
|
|||
DROP TABLE t1; |
|||
DROP TABLE t2; |
|||
|
|||
--echo # |
|||
--echo # Bug 21433768: NON-REPEATABLE READ WITH REPEATABLE READ ISOLATION |
|||
--echo # |
|||
|
|||
--connect (con1,localhost,root,,) |
|||
--echo # connection con1 |
|||
|
|||
CREATE TABLE t1(col1 INT PRIMARY KEY, col2 INT) ENGINE = InnoDB; |
|||
INSERT INTO t1 values (1, 0), (2, 0); |
|||
SELECT * FROM t1 ORDER BY col1; |
|||
|
|||
START TRANSACTION; |
|||
UPDATE t1 SET col2 = 100; |
|||
SET DEBUG_SYNC = 'after_trx_committed_in_memory SIGNAL s1 WAIT_FOR s2'; |
|||
--send COMMIT; |
|||
|
|||
connection default; |
|||
--echo # connection default |
|||
SET DEBUG_SYNC = 'now WAIT_FOR s1'; |
|||
UPDATE t1 SET col2 = col2 + 10 where col1 = 1; |
|||
COMMIT; |
|||
|
|||
SELECT * FROM t1 ORDER BY col1; |
|||
SET DEBUG_SYNC = 'now SIGNAL s2'; |
|||
|
|||
connection con1; |
|||
--echo # connection con1 |
|||
--echo # reap COMMIT for con1 |
|||
reap; |
|||
|
|||
connection default; |
|||
--echo # connection default |
|||
disconnect con1; |
|||
|
|||
DROP TABLE t1; |
|||
|
|||
# Clean up resources used in this test case. |
|||
--disable_warnings |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
--enable_warnings |
|||
--source include/wait_until_count_sessions.inc |
|||
@ -0,0 +1,12 @@ |
|||
############################################################################## |
|||
# |
|||
# List the test cases that are to be disabled temporarily. |
|||
# |
|||
# Separate the test case name and the comment with ':'. |
|||
# |
|||
# <testcasename> : BUG#<xxxx> <date disabled> <disabler> <comment> |
|||
# |
|||
# Do not use any TAB characters for whitespace. |
|||
# |
|||
############################################################################## |
|||
big_innodb_log : MDEV-20421 2019-08-26 wlad Always fails on Windows buildbot |
|||
@ -0,0 +1,164 @@ |
|||
include/master-slave.inc |
|||
[connection master] |
|||
#################################################################### |
|||
# Test Case1: Improved error message with charset information |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 VARCHAR(1) CHARACTER SET 'utf8mb3'); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 VARCHAR(1) CHARACTER SET 'utf8mb4'); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'varchar\(3 octets\)\' to type \'varchar\(4 octets\) character set utf8mb4\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
#################################################################### |
|||
# Test Case2: Improved error message with charset information for CHAR |
|||
# type |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET 'utf8mb3'); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET 'utf8mb4'); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'char\(3 octets\)\' to type \'char\(4 octets\) character set utf8mb4\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
#################################################################### |
|||
# Test Case3: For BLOB type fileds, when type conversion failed on |
|||
# slave, the errormessage had incorrect type names. |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 LONGBLOB); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 TINYBLOB); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'longblob\' to type \'tinyblob\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
#################################################################### |
|||
# Test Case4: Verifies varbinary to binary type conversion failure |
|||
# specific error message. |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 VARBINARY(10)); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 BINARY(10)); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'varbinary\(10\)\' to type \'binary\(10\)\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
#################################################################### |
|||
# Test Case5: Verifies binary to varbinary type conversion failure |
|||
# specific error message. |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 BINARY(10)); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 VARBINARY(10)); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'binary\(10\)\' to type \'varbinary\(10\)\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
#################################################################### |
|||
# Test Case6: Verifies binary to binary type conversion failure |
|||
# specific error message. |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 BINARY(1)); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 BINARY(10)); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'binary\(1\)\' to type \'binary\(10\)\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
#################################################################### |
|||
# Test Case7: Verifies char to blob type conversion failure |
|||
# specific error message. BLOB field on slave has no |
|||
# associated character set hence the master side field |
|||
# is also considered as binary. |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 CHAR(1)); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 BLOB); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'binary\(1\)\' to type \'blob\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
#################################################################### |
|||
# Test Case8: Verifies char to text type conversion failure |
|||
# specific error message. |
|||
#################################################################### |
|||
connection master; |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 CHAR(1)); |
|||
SET SQL_LOG_BIN=1; |
|||
connection slave; |
|||
CREATE TABLE t1 (c1 TEXT); |
|||
connection master; |
|||
INSERT INTO t1 VALUES ('a'); |
|||
connection slave; |
|||
include/wait_for_slave_sql_error.inc [errno=1677] |
|||
FOUND 1 /\'char\(1 octets\)\' to type \'text\'/ in mysqld.2.err |
|||
connection master; |
|||
DROP TABLE t1; |
|||
connection slave; |
|||
DROP TABLE t1; |
|||
include/rpl_reset.inc |
|||
include/rpl_end.inc |
|||
@ -0,0 +1,356 @@ |
|||
# ==== Purpose ==== |
|||
# |
|||
# Test verifies that when slave side type conversion fails in row based |
|||
# replication, more informative error message is displayed. It also verifies |
|||
# that in the case of blob fields appropriate type name is displayed in error |
|||
# message. |
|||
# |
|||
# ==== Implementation ==== |
|||
# |
|||
# Steps: |
|||
# Test case1: |
|||
# 1. Create a table on master with VARCHAR filed and charset |
|||
# 'utf8mb3'. |
|||
# 2. Create a table on slave with VARCHAR field and charset |
|||
# 'utf8mb4'. |
|||
# 3. Insert a tuple on master. |
|||
# 4. Verify that slave provides more informative error message with |
|||
# respect to difference in charsets. |
|||
# Test case2: Repeat same steps as above for CHAR field |
|||
# Test case3: |
|||
# 1. Create a table on master with LONGBLOB field. |
|||
# 2. Create a table on slave with TINYBLOB field. |
|||
# 3. Insert a tuple on master. |
|||
# 4. Verify that error message displayed on slave clearly states type |
|||
# conversion failure from 'longblob' to 'tinyblob'. |
|||
# 5. Also verify that error message doesn't show additional details |
|||
# of charset when not required. |
|||
# Test Case4: Verifies varbinary to binary type conversion failure specific |
|||
# error message. |
|||
# Test Case5: Verifies binary to varbinary type conversion failure specific |
|||
# error message. |
|||
# Test Case6: Verifies binary to binary type conversion failure specific |
|||
# error message. |
|||
# Test Case7: Verifies char to blob type conversion failure specific |
|||
# error message. |
|||
# Test Case8: Verifies char to text type conversion failure specific |
|||
# error message. |
|||
# ==== References ==== |
|||
# |
|||
# MDEV-19925: Column ... cannot be converted from type 'varchar(20)' to type |
|||
# 'varchar(20)' |
|||
# |
|||
|
|||
--source include/have_binlog_format_row.inc |
|||
# Inorder to grep a specific error pattern in error log a fresh error log |
|||
# needs to be generated. |
|||
--source include/force_restart.inc |
|||
--source include/master-slave.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case1: Improved error message with charset information |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 VARCHAR(1) CHARACTER SET 'utf8mb3'); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 VARCHAR(1) CHARACTER SET 'utf8mb4'); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Check error log for correct messages. |
|||
let $log_error_= `SELECT @@GLOBAL.log_error`; |
|||
if(!$log_error_) |
|||
{ |
|||
# MySQL Server on windows is started with --console and thus |
|||
# does not know the location of its .err log, use default location |
|||
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err; |
|||
} |
|||
|
|||
# Error msg before: Column 0 of table 'test.t1' cannot be converted from type 'varchar(3)' to type 'varchar(1)' |
|||
# Error msg after : Column 0 of table 'test.t1' cannot be converted from type 'varchar(3 octets)' to type 'varchar(4 octets) character set utf8mb4' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'varchar\(3 octets\)\' to type \'varchar\(4 octets\) character set utf8mb4\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case2: Improved error message with charset information for CHAR |
|||
--echo # type |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET 'utf8mb3'); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET 'utf8mb4'); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Error msg before: Column 0 of table 'test.t1' cannot be converted from type 'char(0)' to type 'char(1)' |
|||
# Error msg after : Column 0 of table 'test.t1' cannot be converted from type 'char(3 octets)' to type 'char(4 octets) character set utf8mb4)' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'char\(3 octets\)\' to type \'char\(4 octets\) character set utf8mb4\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case3: For BLOB type fileds, when type conversion failed on |
|||
--echo # slave, the errormessage had incorrect type names. |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 LONGBLOB); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 TINYBLOB); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Error msg before: Column 0 of table 'test.t1' cannot be converted from type 'tinyblob' to type 'tinyblob' |
|||
# Error msg after : Column 0 of table 'test.t1' cannot be converted from type 'longblob' to type 'tinyblob' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'longblob\' to type \'tinyblob\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case4: Verifies varbinary to binary type conversion failure |
|||
--echo # specific error message. |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 VARBINARY(10)); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 BINARY(10)); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Check error log for correct messages. |
|||
let $log_error_= `SELECT @@GLOBAL.log_error`; |
|||
if(!$log_error_) |
|||
{ |
|||
# MySQL Server on windows is started with --console and thus |
|||
# does not know the location of its .err log, use default location |
|||
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err; |
|||
} |
|||
|
|||
# Expected Error : Column 0 of table 'test.t1' cannot be converted from type 'varbinary(10)' to type 'binary(10)' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'varbinary\(10\)\' to type \'binary\(10\)\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case5: Verifies binary to varbinary type conversion failure |
|||
--echo # specific error message. |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 BINARY(10)); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 VARBINARY(10)); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Check error log for correct messages. |
|||
let $log_error_= `SELECT @@GLOBAL.log_error`; |
|||
if(!$log_error_) |
|||
{ |
|||
# MySQL Server on windows is started with --console and thus |
|||
# does not know the location of its .err log, use default location |
|||
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err; |
|||
} |
|||
|
|||
# Expected Error : Column 0 of table 'test.t1' cannot be converted from type 'binary(10)' to type 'varbinary(10)' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'binary\(10\)\' to type \'varbinary\(10\)\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case6: Verifies binary to binary type conversion failure |
|||
--echo # specific error message. |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 BINARY(1)); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 BINARY(10)); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Check error log for correct messages. |
|||
let $log_error_= `SELECT @@GLOBAL.log_error`; |
|||
if(!$log_error_) |
|||
{ |
|||
# MySQL Server on windows is started with --console and thus |
|||
# does not know the location of its .err log, use default location |
|||
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err; |
|||
} |
|||
|
|||
# Expected Error : Column 0 of table 'test.t1' cannot be converted from type 'binary(1)' to type 'binary(10)' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'binary\(1\)\' to type \'binary\(10\)\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case7: Verifies char to blob type conversion failure |
|||
--echo # specific error message. BLOB field on slave has no |
|||
--echo # associated character set hence the master side field |
|||
--echo # is also considered as binary. |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 CHAR(1)); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 BLOB); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Check error log for correct messages. |
|||
let $log_error_= `SELECT @@GLOBAL.log_error`; |
|||
if(!$log_error_) |
|||
{ |
|||
# MySQL Server on windows is started with --console and thus |
|||
# does not know the location of its .err log, use default location |
|||
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err; |
|||
} |
|||
|
|||
# Expected Error : Column 0 of table 'test.t1' cannot be converted from type 'binary(1)' to type 'binary(10)' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'binary\(1\)\' to type \'blob\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--echo #################################################################### |
|||
--echo # Test Case8: Verifies char to text type conversion failure |
|||
--echo # specific error message. |
|||
--echo #################################################################### |
|||
--connection master |
|||
SET SQL_LOG_BIN=0; |
|||
CREATE TABLE t1 (c1 CHAR(1)); |
|||
SET SQL_LOG_BIN=1; |
|||
|
|||
--connection slave |
|||
CREATE TABLE t1 (c1 TEXT); |
|||
|
|||
--connection master |
|||
INSERT INTO t1 VALUES ('a'); |
|||
|
|||
--connection slave |
|||
--let $slave_sql_errno= 1677 |
|||
--source include/wait_for_slave_sql_error.inc |
|||
|
|||
# Check error log for correct messages. |
|||
let $log_error_= `SELECT @@GLOBAL.log_error`; |
|||
if(!$log_error_) |
|||
{ |
|||
# MySQL Server on windows is started with --console and thus |
|||
# does not know the location of its .err log, use default location |
|||
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err; |
|||
} |
|||
|
|||
# Expected Error : Column 0 of table 'test.t1' cannot be converted from type 'binary(1)' to type 'binary(10)' |
|||
--let SEARCH_FILE=$log_error_ |
|||
--let SEARCH_PATTERN=\'char\(1 octets\)\' to type \'text\' |
|||
--source include/search_pattern_in_file.inc |
|||
|
|||
--connection master |
|||
DROP TABLE t1; |
|||
--connection slave |
|||
DROP TABLE t1; |
|||
--let $rpl_only_running_threads= 1 |
|||
--source include/rpl_reset.inc |
|||
|
|||
--source include/rpl_end.inc |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue