--source include/have_innodb.inc --source include/have_debug.inc --source include/have_debug_sync.inc --source alter_sql_mode.inc let $sql_mode = `SELECT @@SQL_MODE`; let $error_code = 0; if ($sql_mode == "STRICT_TRANS_TABLES") { let $error_code = ER_INVALID_USE_OF_NULL; } # Alter table should fail for strict sql mode CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB; INSERT INTO t1 VALUES(1, 1); --enable_info SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR flushed'; send ALTER TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2; connect (con1,localhost,root); SET DEBUG_SYNC= 'now WAIT_FOR opened'; INSERT INTO t1 VALUES(2, NULL); UPDATE t1 SET c1 = 3 WHERE c2 = 1; SET DEBUG_SYNC= 'now SIGNAL flushed'; connection default; --error $error_code reap; --disable_info SELECT * FROM t1; DROP TABLE t1; # Alter table should successfully apply the log for the alter operation CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB; INSERT INTO t1 VALUES(1, 1); --enable_info SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR flushed'; send ALTER TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2; connection con1; SET DEBUG_SYNC= 'now WAIT_FOR opened'; INSERT INTO t1 VALUES(2, 3); UPDATE t1 SET c1 = 3 WHERE c2 = 1; SET DEBUG_SYNC= 'now SIGNAL flushed'; connection default; reap; --disable_info SELECT * FROM t1; DROP TABLE t1; # Alter ignore should not give error CREATE TABLE t1(c1 INT NOT NULL, c2 INT, c3 INT, PRIMARY KEY(c1))ENGINE=INNODB; INSERT INTO t1 VALUES(1, 2, 3); --enable_info SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR flushed'; send ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2; connection con1; SET DEBUG_SYNC= 'now WAIT_FOR opened'; UPDATE t1 SET c2= 2 WHERE c1 = 1; INSERT INTO t1 VALUES (2, NULL, 4); SET DEBUG_SYNC= 'now SIGNAL flushed'; connection default; reap; --disable_info SELECT * FROM t1; DROP TABLE t1; SET DEBUG_SYNC='RESET'; --echo # --echo # MDEV-21539 Assertion ...prtype... in row_log_table_apply_convert_mrec --echo # CREATE TABLE t1 (f VARCHAR(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci) ENGINE=InnoDB; INSERT INTO t1 VALUES('ZERO'); connection con1; SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR insert_done'; send ALTER TABLE t1 MODIFY f VARCHAR(256) COLLATE latin1_german2_ci NOT NULL; --echo # session default connection default; SET DEBUG_SYNC = 'now WAIT_FOR scanned'; INSERT INTO t1 VALUES('one'); SET DEBUG_SYNC = 'now SIGNAL insert_done'; connection con1; reap; disconnect con1; connection default; SET DEBUG_SYNC=RESET; ALTER TABLE t1 CHANGE f eins VARCHAR(257) COLLATE latin1_german1_ci NOT NULL, ALGORITHM=INSTANT; SELECT * FROM t1; DROP TABLE t1;