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
|
1 2 3
|
||||||
2 0 4
|
2 0 4
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
disconnect con1;
|
|
||||||
SET DEBUG_SYNC='RESET';
|
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
|
--disable_info
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
disconnect con1;
|
|
||||||
SET DEBUG_SYNC='RESET';
|
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. */
|
/* See if any columns were changed to NULL or NOT NULL. */
|
||||||
const dict_col_t* new_col
|
const dict_col_t* new_col
|
||||||
= dict_table_get_nth_col(log->table, col_no);
|
= 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. */
|
/* 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)
|
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) {
|
if (new_col->prtype == col->prtype) {
|
||||||
continue;
|
continue;
|
||||||
|
Reference in New Issue
Block a user