mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-15348 Failure to load CREATE SEQUENCE...ROW_FORMAT=REDUNDANT
dict_sys_tables_type_valid(): Do not reject NO_ROLLBACK (sequence) in ROW_FORMAT=REDUNDANT. dict_load_table_low(): When flagging an error, assign *table = NULL. Failure to do so could cause a crash if an error was flagged when accessing INFORMATION_SCHEMA.INNODB_SYS_TABLES.
This commit is contained in:
@ -638,6 +638,9 @@ drop table s;
|
|||||||
# MDEV-15115 Assertion failure in CREATE SEQUENCE...ROW_FORMAT=REDUNDANT
|
# MDEV-15115 Assertion failure in CREATE SEQUENCE...ROW_FORMAT=REDUNDANT
|
||||||
#
|
#
|
||||||
CREATE SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
CREATE SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME='test/seq1';
|
||||||
|
TABLE_ID NAME FLAG N_COLS SPACE ROW_FORMAT ZIP_PAGE_SIZE SPACE_TYPE
|
||||||
|
# test/seq1 12288 11 # Redundant 0 Single
|
||||||
DROP SEQUENCE seq1;
|
DROP SEQUENCE seq1;
|
||||||
CREATE TEMPORARY SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
CREATE TEMPORARY SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||||
DROP TEMPORARY SEQUENCE seq1;
|
DROP TEMPORARY SEQUENCE seq1;
|
||||||
|
@ -455,6 +455,10 @@ drop table s;
|
|||||||
--echo # MDEV-15115 Assertion failure in CREATE SEQUENCE...ROW_FORMAT=REDUNDANT
|
--echo # MDEV-15115 Assertion failure in CREATE SEQUENCE...ROW_FORMAT=REDUNDANT
|
||||||
--echo #
|
--echo #
|
||||||
CREATE SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
CREATE SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||||
|
|
||||||
|
--replace_column 1 # 5 #
|
||||||
|
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME='test/seq1';
|
||||||
|
|
||||||
DROP SEQUENCE seq1;
|
DROP SEQUENCE seq1;
|
||||||
CREATE TEMPORARY SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
CREATE TEMPORARY SEQUENCE seq1 ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||||
DROP TEMPORARY SEQUENCE seq1;
|
DROP TEMPORARY SEQUENCE seq1;
|
||||||
|
@ -1136,8 +1136,9 @@ dict_sys_tables_type_valid(ulint type, bool not_redundant)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!not_redundant) {
|
if (!not_redundant) {
|
||||||
/* SYS_TABLES.TYPE must be 1 for ROW_FORMAT=REDUNDANT. */
|
/* SYS_TABLES.TYPE must be 1 or 1|DICT_TF_MASK_NO_ROLLBACK
|
||||||
return(false);
|
for ROW_FORMAT=REDUNDANT. */
|
||||||
|
return !(type & ~(1 | DICT_TF_MASK_NO_ROLLBACK));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type >= 1U << DICT_TF_POS_UNUSED) {
|
if (type >= 1U << DICT_TF_POS_UNUSED) {
|
||||||
@ -2637,11 +2638,13 @@ dict_load_table_low(table_name_t& name, const rec_t* rec, dict_table_t** table)
|
|||||||
ulint n_v_col;
|
ulint n_v_col;
|
||||||
|
|
||||||
if (const char* error_text = dict_sys_tables_rec_check(rec)) {
|
if (const char* error_text = dict_sys_tables_rec_check(rec)) {
|
||||||
|
*table = NULL;
|
||||||
return(error_text);
|
return(error_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dict_sys_tables_rec_read(rec, name, &table_id, &space_id,
|
if (!dict_sys_tables_rec_read(rec, name, &table_id, &space_id,
|
||||||
&t_num, &flags, &flags2)) {
|
&t_num, &flags, &flags2)) {
|
||||||
|
*table = NULL;
|
||||||
return(dict_load_table_flags);
|
return(dict_load_table_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user