mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge 10.2 into 10.3
This commit is contained in:
@ -32,8 +32,8 @@ if (IS_WINDOWS){
|
|||||||
my $list= `handle.exe -? -accepteula 2>&1`;
|
my $list= `handle.exe -? -accepteula 2>&1`;
|
||||||
foreach my $line (split('\n', $list))
|
foreach my $line (split('\n', $list))
|
||||||
{
|
{
|
||||||
$handle_exe= "$1.$2"
|
$handle_exe= "$2.$3"
|
||||||
if ($line =~ /Handle v([0-9]*)\.([0-9]*)/);
|
if ($line =~ /(Nth|H)andle v([0-9]*)\.([0-9]*)/);
|
||||||
}
|
}
|
||||||
if ($handle_exe){
|
if ($handle_exe){
|
||||||
print "Found handle.exe version $handle_exe\n";
|
print "Found handle.exe version $handle_exe\n";
|
||||||
|
227
mysql-test/suite/innodb/r/innodb-read-view.result
Normal file
227
mysql-test/suite/innodb/r/innodb-read-view.result
Normal file
@ -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';
|
214
mysql-test/suite/innodb/t/innodb-read-view.test
Normal file
214
mysql-test/suite/innodb/t/innodb-read-view.test
Normal file
@ -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
|
12
mysql-test/suite/mariabackup/disabled.def
Normal file
12
mysql-test/suite/mariabackup/disabled.def
Normal file
@ -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
|
@ -468,7 +468,7 @@ INSERT INTO t10 () VALUES(1,@b1,DEFAULT,'Kyle',DEFAULT),
|
|||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'double' to type 'char(5)''
|
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'double' to type 'char(5 octets) character set latin1''
|
||||||
|
|
||||||
*** Drop t10 ***
|
*** Drop t10 ***
|
||||||
connection master;
|
connection master;
|
||||||
@ -510,7 +510,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Testing is fun','Kyle',DEFAULT),
|
|||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'tinyblob' to type 'varchar(254)''
|
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'blob' to type 'varchar(254 octets) character set latin1''
|
||||||
|
|
||||||
*** Drop t11 ***
|
*** Drop t11 ***
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -468,7 +468,7 @@ INSERT INTO t10 () VALUES(1,@b1,DEFAULT,'Kyle',DEFAULT),
|
|||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'double' to type 'char(5)''
|
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'double' to type 'char(5 octets) character set latin1''
|
||||||
|
|
||||||
*** Drop t10 ***
|
*** Drop t10 ***
|
||||||
connection master;
|
connection master;
|
||||||
@ -510,7 +510,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Testing is fun','Kyle',DEFAULT),
|
|||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'tinyblob' to type 'varchar(254)''
|
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'blob' to type 'varchar(254 octets) character set latin1''
|
||||||
|
|
||||||
*** Drop t11 ***
|
*** Drop t11 ***
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -64,7 +64,7 @@ a b c
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10)' to type 'char(5)''
|
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10 octets)' to type 'char(5 octets) character set latin1''
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
RESET SLAVE;
|
RESET SLAVE;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
@ -102,7 +102,7 @@ INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TEST
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t3' cannot be converted from type 'tinyblob' to type 'int(11)''
|
Last_SQL_Error = 'Column 0 of table 'test.t3' cannot be converted from type 'blob' to type 'int(11)''
|
||||||
*** Drop t3 ***
|
*** Drop t3 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t3;
|
DROP TABLE t3;
|
||||||
@ -160,7 +160,7 @@ INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098),
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'varchar(6)' to type 'char(5)''
|
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'varchar(6 octets)' to type 'char(5 octets) character set latin1''
|
||||||
*** Drop t5 ***
|
*** Drop t5 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t5;
|
DROP TABLE t5;
|
||||||
@ -188,7 +188,7 @@ INSERT INTO t6 () VALUES(1,'Kyle',200.23,1),
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'varchar(6)' to type 'char(5)''
|
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'varchar(6 octets)' to type 'char(5 octets) character set latin1''
|
||||||
*** Drop t6 ***
|
*** Drop t6 ***
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
connection master;
|
connection master;
|
||||||
@ -310,7 +310,7 @@ INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'char(5)' to type 'double''
|
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'char(5 octets)' to type 'double''
|
||||||
*** Drop t10 ***
|
*** Drop t10 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t10;
|
DROP TABLE t10;
|
||||||
@ -338,7 +338,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'varchar(254)' to type 'int(11)''
|
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'varchar(254 octets)' to type 'int(11)''
|
||||||
*** Drop t11 ***
|
*** Drop t11 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t11;
|
DROP TABLE t11;
|
||||||
|
@ -64,7 +64,7 @@ a b c
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10)' to type 'char(5)''
|
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10 octets)' to type 'char(5 octets) character set latin1''
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
RESET SLAVE;
|
RESET SLAVE;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
@ -102,7 +102,7 @@ INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TEST
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t3' cannot be converted from type 'tinyblob' to type 'int(11)''
|
Last_SQL_Error = 'Column 0 of table 'test.t3' cannot be converted from type 'blob' to type 'int(11)''
|
||||||
*** Drop t3 ***
|
*** Drop t3 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t3;
|
DROP TABLE t3;
|
||||||
@ -160,7 +160,7 @@ INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098),
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'varchar(6)' to type 'char(5)''
|
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'varchar(6 octets)' to type 'char(5 octets) character set latin1''
|
||||||
*** Drop t5 ***
|
*** Drop t5 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t5;
|
DROP TABLE t5;
|
||||||
@ -188,7 +188,7 @@ INSERT INTO t6 () VALUES(1,'Kyle',200.23,1),
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'varchar(6)' to type 'char(5)''
|
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'varchar(6 octets)' to type 'char(5 octets) character set latin1''
|
||||||
*** Drop t6 ***
|
*** Drop t6 ***
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
connection master;
|
connection master;
|
||||||
@ -310,7 +310,7 @@ INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'char(5)' to type 'double''
|
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'char(5 octets)' to type 'double''
|
||||||
*** Drop t10 ***
|
*** Drop t10 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t10;
|
DROP TABLE t10;
|
||||||
@ -338,7 +338,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'varchar(254)' to type 'int(11)''
|
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'varchar(254 octets)' to type 'int(11)''
|
||||||
*** Drop t11 ***
|
*** Drop t11 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t11;
|
DROP TABLE t11;
|
||||||
|
@ -560,7 +560,7 @@ INSERT INTO t5 VALUES (1, "", 1);
|
|||||||
INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2);
|
INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'char(255)' to type 'char(16)''
|
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'char(765 octets)' to type 'char(48 octets) character set utf8''
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
[expecting slave to stop]
|
[expecting slave to stop]
|
||||||
connection master;
|
connection master;
|
||||||
@ -568,7 +568,7 @@ INSERT INTO t6 VALUES (1, "", 1);
|
|||||||
INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2);
|
INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'char(255)' to type 'char(128)''
|
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'char(765 octets)' to type 'char(384 octets) character set utf8''
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
[expecting slave to replicate correctly]
|
[expecting slave to replicate correctly]
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -565,7 +565,7 @@ INSERT INTO t5 VALUES (1, "", 1);
|
|||||||
INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2);
|
INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'char(255)' to type 'char(16)''
|
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'char(765 octets)' to type 'char(48 octets) character set utf8''
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
[expecting slave to stop]
|
[expecting slave to stop]
|
||||||
connection master;
|
connection master;
|
||||||
@ -573,7 +573,7 @@ INSERT INTO t6 VALUES (1, "", 1);
|
|||||||
INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2);
|
INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'char(255)' to type 'char(128)''
|
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'char(765 octets)' to type 'char(384 octets) character set utf8''
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
[expecting slave to replicate correctly]
|
[expecting slave to replicate correctly]
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -185,7 +185,7 @@ INSERT INTO t1 VALUES ('This is a test.');
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'char(20)' to type 'char(10)''
|
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'char(20 octets)' to type 'char(10 octets) character set latin1''
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
0
|
0
|
||||||
@ -264,7 +264,7 @@ INSERT INTO t1 VALUES ('This is a test.');
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'varchar(2000)' to type 'varchar(100)''
|
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'varchar(2000 octets)' to type 'varchar(100 octets) character set latin1''
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
0
|
0
|
||||||
@ -287,7 +287,7 @@ INSERT INTO t1 VALUES ('This is a test.');
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'varchar(200)' to type 'varchar(10)''
|
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'varchar(200 octets)' to type 'varchar(10 octets) character set latin1''
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
0
|
0
|
||||||
@ -310,7 +310,7 @@ INSERT INTO t1 VALUES ('This is a test.');
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'varchar(2000)' to type 'varchar(1000)''
|
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'varchar(2000 octets)' to type 'varchar(1000 octets) character set latin1''
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
0
|
0
|
||||||
@ -334,7 +334,7 @@ INSERT INTO t1 VALUES ('This is a test.');
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'tinyblob' to type 'tinyblob''
|
Last_SQL_Error = 'Column 0 of table 'test.t1' cannot be converted from type 'longblob' to type 'tinyblob''
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
0
|
0
|
||||||
|
164
mysql-test/suite/rpl/r/rpl_row_type_conv_err_msg.result
Normal file
164
mysql-test/suite/rpl/r/rpl_row_type_conv_err_msg.result
Normal file
@ -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
|
356
mysql-test/suite/rpl/t/rpl_row_type_conv_err_msg.test
Normal file
356
mysql-test/suite/rpl/t/rpl_row_type_conv_err_msg.test
Normal file
@ -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
|
45
sql/field.cc
45
sql/field.cc
@ -7310,6 +7310,28 @@ void Field_string::sql_type(String &res) const
|
|||||||
res.append(STRING_WITH_LEN(" binary"));
|
res.append(STRING_WITH_LEN(" binary"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
For fields which are associated with character sets their length is provided
|
||||||
|
in octets and their character set information is also provided as part of
|
||||||
|
type information.
|
||||||
|
|
||||||
|
@param res String which contains filed type and length.
|
||||||
|
*/
|
||||||
|
void Field_string::sql_rpl_type(String *res) const
|
||||||
|
{
|
||||||
|
CHARSET_INFO *cs=charset();
|
||||||
|
if (Field_string::has_charset())
|
||||||
|
{
|
||||||
|
size_t length= cs->cset->snprintf(cs, (char*) res->ptr(),
|
||||||
|
res->alloced_length(),
|
||||||
|
"char(%u octets) character set %s",
|
||||||
|
field_length,
|
||||||
|
charset()->csname);
|
||||||
|
res->length(length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Field_string::sql_type(*res);
|
||||||
|
}
|
||||||
|
|
||||||
uchar *Field_string::pack(uchar *to, const uchar *from, uint max_length)
|
uchar *Field_string::pack(uchar *to, const uchar *from, uint max_length)
|
||||||
{
|
{
|
||||||
@ -7730,6 +7752,29 @@ void Field_varstring::sql_type(String &res) const
|
|||||||
res.append(STRING_WITH_LEN(" binary"));
|
res.append(STRING_WITH_LEN(" binary"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
For fields which are associated with character sets their length is provided
|
||||||
|
in octets and their character set information is also provided as part of
|
||||||
|
type information.
|
||||||
|
|
||||||
|
@param res String which contains filed type and length.
|
||||||
|
*/
|
||||||
|
void Field_varstring::sql_rpl_type(String *res) const
|
||||||
|
{
|
||||||
|
CHARSET_INFO *cs=charset();
|
||||||
|
if (Field_varstring::has_charset())
|
||||||
|
{
|
||||||
|
size_t length= cs->cset->snprintf(cs, (char*) res->ptr(),
|
||||||
|
res->alloced_length(),
|
||||||
|
"varchar(%u octets) character set %s",
|
||||||
|
field_length,
|
||||||
|
charset()->csname);
|
||||||
|
res->length(length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Field_varstring::sql_type(*res);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32 Field_varstring::data_length()
|
uint32 Field_varstring::data_length()
|
||||||
{
|
{
|
||||||
|
@ -1140,6 +1140,7 @@ public:
|
|||||||
in str and restore it with set() if needed
|
in str and restore it with set() if needed
|
||||||
*/
|
*/
|
||||||
virtual void sql_type(String &str) const =0;
|
virtual void sql_type(String &str) const =0;
|
||||||
|
virtual void sql_rpl_type(String *str) const { sql_type(*str); }
|
||||||
virtual uint size_of() const =0; // For new field
|
virtual uint size_of() const =0; // For new field
|
||||||
inline bool is_null(my_ptrdiff_t row_offset= 0) const
|
inline bool is_null(my_ptrdiff_t row_offset= 0) const
|
||||||
{
|
{
|
||||||
@ -3362,6 +3363,7 @@ public:
|
|||||||
int cmp(const uchar *,const uchar *);
|
int cmp(const uchar *,const uchar *);
|
||||||
void sort_string(uchar *buff,uint length);
|
void sort_string(uchar *buff,uint length);
|
||||||
void sql_type(String &str) const;
|
void sql_type(String &str) const;
|
||||||
|
void sql_rpl_type(String*) const;
|
||||||
virtual uchar *pack(uchar *to, const uchar *from,
|
virtual uchar *pack(uchar *to, const uchar *from,
|
||||||
uint max_length);
|
uint max_length);
|
||||||
virtual const uchar *unpack(uchar* to, const uchar *from,
|
virtual const uchar *unpack(uchar* to, const uchar *from,
|
||||||
@ -3472,6 +3474,7 @@ public:
|
|||||||
uint get_key_image(uchar *buff,uint length, imagetype type);
|
uint get_key_image(uchar *buff,uint length, imagetype type);
|
||||||
void set_key_image(const uchar *buff,uint length);
|
void set_key_image(const uchar *buff,uint length);
|
||||||
void sql_type(String &str) const;
|
void sql_type(String &str) const;
|
||||||
|
void sql_rpl_type(String*) const;
|
||||||
virtual uchar *pack(uchar *to, const uchar *from, uint max_length);
|
virtual uchar *pack(uchar *to, const uchar *from, uint max_length);
|
||||||
virtual const uchar *unpack(uchar* to, const uchar *from,
|
virtual const uchar *unpack(uchar* to, const uchar *from,
|
||||||
const uchar *from_end, uint param_data);
|
const uchar *from_end, uint param_data);
|
||||||
|
@ -352,7 +352,8 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
|
|||||||
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
|
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
void show_sql_type(enum_field_types type, uint16 metadata, String *str, CHARSET_INFO *field_cs)
|
void show_sql_type(enum_field_types type, uint16 metadata, String *str,
|
||||||
|
bool char_with_octets)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("show_sql_type");
|
DBUG_ENTER("show_sql_type");
|
||||||
DBUG_PRINT("enter", ("type: %d, metadata: 0x%x", type, metadata));
|
DBUG_PRINT("enter", ("type: %d, metadata: 0x%x", type, metadata));
|
||||||
@ -420,11 +421,13 @@ void show_sql_type(enum_field_types type, uint16 metadata, String *str, CHARSET_
|
|||||||
case MYSQL_TYPE_VARCHAR_COMPRESSED:
|
case MYSQL_TYPE_VARCHAR_COMPRESSED:
|
||||||
{
|
{
|
||||||
CHARSET_INFO *cs= str->charset();
|
CHARSET_INFO *cs= str->charset();
|
||||||
size_t length=
|
size_t length=0;
|
||||||
cs->cset->snprintf(cs, (char*) str->ptr(), str->alloced_length(),
|
if (char_with_octets)
|
||||||
"varchar(%u)%s", metadata,
|
length= cs->cset->snprintf(cs, (char*) str->ptr(), str->alloced_length(),
|
||||||
type == MYSQL_TYPE_VARCHAR_COMPRESSED ? " compressed"
|
"varchar(%u octets)", metadata);
|
||||||
: "");
|
else
|
||||||
|
length= cs->cset->snprintf(cs, (char*) str->ptr(), str->alloced_length(),
|
||||||
|
"varbinary(%u)", metadata);
|
||||||
str->length(length);
|
str->length(length);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -475,24 +478,24 @@ void show_sql_type(enum_field_types type, uint16 metadata, String *str, CHARSET_
|
|||||||
it is necessary to check the pack length to figure out what kind
|
it is necessary to check the pack length to figure out what kind
|
||||||
of blob it really is.
|
of blob it really is.
|
||||||
*/
|
*/
|
||||||
switch (get_blob_type_from_length(metadata))
|
switch (metadata)
|
||||||
{
|
{
|
||||||
case MYSQL_TYPE_TINY_BLOB:
|
case 1:
|
||||||
str->set_ascii(STRING_WITH_LEN("tinyblob"));
|
str->set_ascii(STRING_WITH_LEN("tinyblob"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MYSQL_TYPE_MEDIUM_BLOB:
|
case 2:
|
||||||
|
str->set_ascii(STRING_WITH_LEN("blob"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
str->set_ascii(STRING_WITH_LEN("mediumblob"));
|
str->set_ascii(STRING_WITH_LEN("mediumblob"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MYSQL_TYPE_LONG_BLOB:
|
case 4:
|
||||||
str->set_ascii(STRING_WITH_LEN("longblob"));
|
str->set_ascii(STRING_WITH_LEN("longblob"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MYSQL_TYPE_BLOB:
|
|
||||||
str->set_ascii(STRING_WITH_LEN("blob"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
break;
|
break;
|
||||||
@ -509,9 +512,13 @@ void show_sql_type(enum_field_types type, uint16 metadata, String *str, CHARSET_
|
|||||||
*/
|
*/
|
||||||
CHARSET_INFO *cs= str->charset();
|
CHARSET_INFO *cs= str->charset();
|
||||||
uint bytes= (((metadata >> 4) & 0x300) ^ 0x300) + (metadata & 0x00ff);
|
uint bytes= (((metadata >> 4) & 0x300) ^ 0x300) + (metadata & 0x00ff);
|
||||||
size_t length=
|
size_t length=0;
|
||||||
cs->cset->snprintf(cs, (char*) str->ptr(), str->alloced_length(),
|
if (char_with_octets)
|
||||||
"char(%d)", bytes / field_cs->mbmaxlen);
|
length= cs->cset->snprintf(cs, (char*) str->ptr(), str->alloced_length(),
|
||||||
|
"char(%u octets)", bytes);
|
||||||
|
else
|
||||||
|
length= cs->cset->snprintf(cs, (char*) str->ptr(), str->alloced_length(),
|
||||||
|
"binary(%u)", bytes);
|
||||||
str->length(length);
|
str->length(length);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -948,9 +955,13 @@ table_def::compatible_with(THD *thd, rpl_group_info *rgi,
|
|||||||
String source_type(source_buf, sizeof(source_buf), &my_charset_latin1);
|
String source_type(source_buf, sizeof(source_buf), &my_charset_latin1);
|
||||||
String target_type(target_buf, sizeof(target_buf), &my_charset_latin1);
|
String target_type(target_buf, sizeof(target_buf), &my_charset_latin1);
|
||||||
THD *thd= table->in_use;
|
THD *thd= table->in_use;
|
||||||
|
bool char_with_octets= field->cmp_type() == STRING_RESULT ?
|
||||||
|
field->has_charset() : true;
|
||||||
|
|
||||||
|
show_sql_type(type(col), field_metadata(col), &source_type,
|
||||||
|
char_with_octets);
|
||||||
|
field->sql_rpl_type(&target_type);
|
||||||
|
|
||||||
show_sql_type(type(col), field_metadata(col), &source_type, field->charset());
|
|
||||||
field->sql_type(target_type);
|
|
||||||
rli->report(ERROR_LEVEL, ER_SLAVE_CONVERSION_FAILED, rgi->gtid_info(),
|
rli->report(ERROR_LEVEL, ER_SLAVE_CONVERSION_FAILED, rgi->gtid_info(),
|
||||||
ER_THD(thd, ER_SLAVE_CONVERSION_FAILED),
|
ER_THD(thd, ER_SLAVE_CONVERSION_FAILED),
|
||||||
col, db_name, tbl_name,
|
col, db_name, tbl_name,
|
||||||
|
@ -6461,7 +6461,7 @@ ER_MESSAGE_AND_STATEMENT
|
|||||||
eng "%s Statement: %s"
|
eng "%s Statement: %s"
|
||||||
|
|
||||||
ER_SLAVE_CONVERSION_FAILED
|
ER_SLAVE_CONVERSION_FAILED
|
||||||
eng "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'"
|
eng "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.50s' to type '%-.50s'"
|
||||||
ER_SLAVE_CANT_CREATE_CONVERSION
|
ER_SLAVE_CANT_CREATE_CONVERSION
|
||||||
eng "Can't create conversion table for table '%-.192s.%-.192s'"
|
eng "Can't create conversion table for table '%-.192s.%-.192s'"
|
||||||
ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT
|
ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT
|
||||||
|
@ -6291,9 +6291,6 @@ lock_trx_release_locks(
|
|||||||
/*--------------------------------------*/
|
/*--------------------------------------*/
|
||||||
trx_mutex_enter(trx);
|
trx_mutex_enter(trx);
|
||||||
trx->state = TRX_STATE_COMMITTED_IN_MEMORY;
|
trx->state = TRX_STATE_COMMITTED_IN_MEMORY;
|
||||||
/* Ensure that rw_trx_hash_t::find() will no longer find
|
|
||||||
this transaction. */
|
|
||||||
trx->id = 0;
|
|
||||||
trx_mutex_exit(trx);
|
trx_mutex_exit(trx);
|
||||||
/*--------------------------------------*/
|
/*--------------------------------------*/
|
||||||
|
|
||||||
|
@ -492,6 +492,7 @@ trx_free_at_shutdown(trx_t *trx)
|
|||||||
transaction was never committed and therefore lock_trx_release()
|
transaction was never committed and therefore lock_trx_release()
|
||||||
was not called. */
|
was not called. */
|
||||||
trx->lock.table_locks.clear();
|
trx->lock.table_locks.clear();
|
||||||
|
trx->id = 0;
|
||||||
|
|
||||||
trx_free(trx);
|
trx_free(trx);
|
||||||
}
|
}
|
||||||
@ -1333,10 +1334,8 @@ trx_commit_in_memory(
|
|||||||
trx_sys.deregister_rw(trx);
|
trx_sys.deregister_rw(trx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trx->id will be cleared in lock_trx_release_locks(trx). */
|
|
||||||
ut_ad(trx->read_only || !trx->rsegs.m_redo.rseg || trx->id);
|
|
||||||
lock_trx_release_locks(trx);
|
lock_trx_release_locks(trx);
|
||||||
ut_ad(trx->id == 0);
|
ut_ad(trx->read_only || !trx->rsegs.m_redo.rseg || trx->id);
|
||||||
|
|
||||||
/* Remove the transaction from the list of active
|
/* Remove the transaction from the list of active
|
||||||
transactions now that it no longer holds any user locks. */
|
transactions now that it no longer holds any user locks. */
|
||||||
@ -1350,6 +1349,8 @@ trx_commit_in_memory(
|
|||||||
trx_update_mod_tables_timestamp(trx);
|
trx_update_mod_tables_timestamp(trx);
|
||||||
MONITOR_INC(MONITOR_TRX_RW_COMMIT);
|
MONITOR_INC(MONITOR_TRX_RW_COMMIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trx->id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_ad(!trx->rsegs.m_redo.undo);
|
ut_ad(!trx->rsegs.m_redo.undo);
|
||||||
|
@ -468,7 +468,7 @@ INSERT INTO t10 () VALUES(1,@b1,DEFAULT,'Kyle',DEFAULT),
|
|||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'double' to type 'char(5)''
|
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'double' to type 'char(5 octets) character set latin1''
|
||||||
|
|
||||||
*** Drop t10 ***
|
*** Drop t10 ***
|
||||||
connection master;
|
connection master;
|
||||||
@ -510,7 +510,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Testing is fun','Kyle',DEFAULT),
|
|||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'tinyblob' to type 'varchar(254)''
|
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'blob' to type 'varchar(254 octets) character set latin1''
|
||||||
|
|
||||||
*** Drop t11 ***
|
*** Drop t11 ***
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -64,7 +64,7 @@ a b c
|
|||||||
connection slave;
|
connection slave;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10)' to type 'char(5)''
|
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10 octets)' to type 'char(5 octets) character set latin1''
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
RESET SLAVE;
|
RESET SLAVE;
|
||||||
SELECT * FROM t2 ORDER BY a;
|
SELECT * FROM t2 ORDER BY a;
|
||||||
@ -102,7 +102,7 @@ INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TEST
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 0 of table 'test.t3' cannot be converted from type 'tinyblob' to type 'int(11)''
|
Last_SQL_Error = 'Column 0 of table 'test.t3' cannot be converted from type 'blob' to type 'int(11)''
|
||||||
*** Drop t3 ***
|
*** Drop t3 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t3;
|
DROP TABLE t3;
|
||||||
@ -160,7 +160,7 @@ INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098),
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'varchar(6)' to type 'char(5)''
|
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'varchar(6 octets)' to type 'char(5 octets) character set latin1''
|
||||||
*** Drop t5 ***
|
*** Drop t5 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t5;
|
DROP TABLE t5;
|
||||||
@ -188,7 +188,7 @@ INSERT INTO t6 () VALUES(1,'Kyle',200.23,1),
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'varchar(6)' to type 'char(5)''
|
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'varchar(6 octets)' to type 'char(5 octets) character set latin1''
|
||||||
*** Drop t6 ***
|
*** Drop t6 ***
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
connection master;
|
connection master;
|
||||||
@ -310,7 +310,7 @@ INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'char(5)' to type 'double''
|
Last_SQL_Error = 'Column 2 of table 'test.t10' cannot be converted from type 'char(5 octets)' to type 'double''
|
||||||
*** Drop t10 ***
|
*** Drop t10 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t10;
|
DROP TABLE t10;
|
||||||
@ -338,7 +338,7 @@ INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||||||
********************************************
|
********************************************
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
include/wait_for_slave_sql_error_and_skip.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'varchar(254)' to type 'int(11)''
|
Last_SQL_Error = 'Column 2 of table 'test.t11' cannot be converted from type 'varchar(254 octets)' to type 'int(11)''
|
||||||
*** Drop t11 ***
|
*** Drop t11 ***
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t11;
|
DROP TABLE t11;
|
||||||
|
@ -565,7 +565,7 @@ INSERT INTO t5 VALUES (1, "", 1);
|
|||||||
INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2);
|
INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'char(255)' to type 'char(16)''
|
Last_SQL_Error = 'Column 1 of table 'test.t5' cannot be converted from type 'char(765 octets)' to type 'char(48 octets) character set utf8''
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
[expecting slave to stop]
|
[expecting slave to stop]
|
||||||
connection master;
|
connection master;
|
||||||
@ -573,7 +573,7 @@ INSERT INTO t6 VALUES (1, "", 1);
|
|||||||
INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2);
|
INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||||
connection slave;
|
connection slave;
|
||||||
include/wait_for_slave_sql_error.inc [errno=1677]
|
include/wait_for_slave_sql_error.inc [errno=1677]
|
||||||
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'char(255)' to type 'char(128)''
|
Last_SQL_Error = 'Column 1 of table 'test.t6' cannot be converted from type 'char(765 octets)' to type 'char(384 octets) character set utf8''
|
||||||
include/rpl_reset.inc
|
include/rpl_reset.inc
|
||||||
[expecting slave to replicate correctly]
|
[expecting slave to replicate correctly]
|
||||||
connection master;
|
connection master;
|
||||||
|
Reference in New Issue
Block a user