mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-21539 Assertion ...prtype... failed in row_log_table_apply_convert_mrec
This bug is a cousin of MDEV-18719 and MDEV-20190, which failed to relax a debug assertion in one more code path. row_log_table_apply_convert_mrec(): Use dict_col_t::same_format() and ignore all format-agnostic flags in the assertions.
This commit is contained in:
@ -74,5 +74,27 @@ c1 c2 c3
|
||||
1 2 3
|
||||
2 0 4
|
||||
DROP TABLE t1;
|
||||
disconnect con1;
|
||||
SET DEBUG_SYNC='RESET';
|
||||
#
|
||||
# MDEV-21539 Assertion ...prtype... in row_log_table_apply_convert_mrec
|
||||
#
|
||||
CREATE TABLE t1 (f VARCHAR(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci)
|
||||
ENGINE=InnoDB;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR insert_done';
|
||||
ALTER TABLE t1 MODIFY f VARCHAR(256) COLLATE latin1_german2_ci NOT NULL;
|
||||
# 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;
|
||||
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;
|
||||
eins
|
||||
one
|
||||
DROP TABLE t1;
|
||||
|
@ -68,5 +68,32 @@ reap;
|
||||
--disable_info
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
disconnect con1;
|
||||
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;
|
||||
|
||||
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;
|
||||
|
@ -1648,12 +1648,12 @@ blob_done:
|
||||
/* See if any columns were changed to NULL or NOT NULL. */
|
||||
const dict_col_t* new_col
|
||||
= dict_table_get_nth_col(log->table, col_no);
|
||||
ut_ad(new_col->mtype == col->mtype);
|
||||
ut_ad(new_col->same_format(*col));
|
||||
|
||||
/* Assert that prtype matches except for nullability. */
|
||||
ut_ad(!((new_col->prtype ^ col->prtype) & ~DATA_NOT_NULL));
|
||||
ut_ad(!((new_col->prtype ^ dfield_get_type(dfield)->prtype)
|
||||
& ~DATA_NOT_NULL));
|
||||
& ~(DATA_NOT_NULL | DATA_VERSIONED
|
||||
| CHAR_COLL_MASK << 16 | DATA_LONG_TRUE_VARCHAR)));
|
||||
|
||||
if (new_col->prtype == col->prtype) {
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user