mirror of
https://github.com/MariaDB/server.git
synced 2025-02-09 23:24:11 +01:00
![Jan Lindström](/assets/img/avatar_default.png)
int wsrep_thd_append_key(THD*, const wsrep_key*, int, Wsrep_service_key_type) CREATE TABLE [SELECT|REPLACE SELECT] is CTAS and idea was that we force ROW format. However, it was not correctly enforced and keys were appended before wsrep transaction was started. At THD::decide_logging_format we should force used stmt binlog format to ROW in CTAS case and produce a warning if used binlog format was not ROW. At ha_innodb::update_row we should not append keys similarly as in ha_innodb::write_row if sql_command is SQLCOM_CREATE_TABLE. Improved error logging on ::write_row, ::update_row and ::delete_row if wsrep key append fails. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
68 lines
2.2 KiB
Text
68 lines
2.2 KiB
Text
--source include/galera_cluster.inc
|
|
--source include/log_bin.inc
|
|
|
|
--echo #
|
|
--echo # Case 1: test with binlog_format ROW
|
|
--echo #
|
|
--connection node_1
|
|
SET @@binlog_format=ROW;
|
|
CREATE TABLE t1 (a INT UNIQUE) SELECT 1 AS a,2 AS b UNION SELECT 2 AS a,3 AS c;
|
|
#
|
|
# Note that this has two rows (1,2) and (1,3) where (1,3) contains duplicate key
|
|
# but we requested REPLACE --> ::update_row() is called to update (1,2) --> (1,3)
|
|
#
|
|
CREATE TABLE t2 (a INT UNIQUE) REPLACE SELECT 1 AS a,2 AS b UNION SELECT 1 AS a,3 AS c;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
--connection node_2
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
|
--source include/wait_condition.inc
|
|
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
DROP TABLE t1,t2;
|
|
|
|
--echo #
|
|
--echo # Case 2: test with binlog_format MIXED
|
|
--echo #
|
|
--connection node_1
|
|
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
|
--source include/wait_condition.inc
|
|
SET @@binlog_format=MIXED;
|
|
CREATE TABLE t1 (a INT UNIQUE) SELECT 1 AS a,2 AS b UNION SELECT 2 AS a,3 AS c;
|
|
CREATE TABLE t2 (a INT UNIQUE) REPLACE SELECT 1 AS a,2 AS b UNION SELECT 1 AS a,3 AS c;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
--connection node_2
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
|
--source include/wait_condition.inc
|
|
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
DROP TABLE t1,t2;
|
|
|
|
--echo #
|
|
--echo # Case 3: test with binlog_format STATEMENT
|
|
--echo #
|
|
--connection node_1
|
|
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
|
--source include/wait_condition.inc
|
|
SET @@binlog_format=STATEMENT;
|
|
CREATE TABLE t1 (a INT UNIQUE) SELECT 1 AS a,2 AS b UNION SELECT 2 AS a,3 AS c;
|
|
CREATE TABLE t2 (a INT UNIQUE) REPLACE SELECT 1 AS a,2 AS b UNION SELECT 1 AS a,3 AS c;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
--connection node_2
|
|
--let $wait_condition = SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2' OR TABLE_NAME = 't1'
|
|
--source include/wait_condition.inc
|
|
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
DROP TABLE t1,t2;
|
|
|
|
--connection node_1
|
|
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
|
--source include/wait_condition.inc
|