mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-15937 Assertion failure 'key->flags & 1' on ALTER TABLE
While the test case crashes a MariaDB 10.2 debug build only, let us apply the fix to the earliest applicable MariaDB series (10.0) to avoid any data corruption on a table-rebuilding ALTER TABLE using ALGORITHM=INPLACE. innobase_create_key_defs(): Use altered_table->s->primary_key when a new primary key is being created.
This commit is contained in:
@ -51,3 +51,7 @@ WHERE NAME='test/t';
|
|||||||
TABLE_ID NAME FLAG N_COLS SPACE FILE_FORMAT ROW_FORMAT ZIP_PAGE_SIZE
|
TABLE_ID NAME FLAG N_COLS SPACE FILE_FORMAT ROW_FORMAT ZIP_PAGE_SIZE
|
||||||
# test/t 1 6 # Antelope Compact 0
|
# test/t 1 6 # Antelope Compact 0
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
CREATE TABLE t1(c1 INT) ENGINE=InnoDB;
|
||||||
|
ALTER TABLE t1 ADD CONSTRAINT UNIQUE KEY i1(c1);
|
||||||
|
ALTER TABLE t1 CHANGE c1 c1 INT NOT NULL,ADD KEY(c1);
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -71,6 +71,11 @@ WHERE NAME='test/t';
|
|||||||
|
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
|
||||||
|
CREATE TABLE t1(c1 INT) ENGINE=InnoDB;
|
||||||
|
ALTER TABLE t1 ADD CONSTRAINT UNIQUE KEY i1(c1);
|
||||||
|
ALTER TABLE t1 CHANGE c1 c1 INT NOT NULL,ADD KEY(c1);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# Check that all connections opened by test cases in this file are really
|
# Check that all connections opened by test cases in this file are really
|
||||||
# gone so execution of other tests won't be affected by their presence.
|
# gone so execution of other tests won't be affected by their presence.
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
@ -1594,6 +1594,7 @@ innobase_create_index_def(
|
|||||||
|
|
||||||
if (key_clustered) {
|
if (key_clustered) {
|
||||||
DBUG_ASSERT(!(key->flags & HA_FULLTEXT));
|
DBUG_ASSERT(!(key->flags & HA_FULLTEXT));
|
||||||
|
DBUG_ASSERT(key->flags & HA_NOSAME);
|
||||||
index->ind_type |= DICT_CLUSTERED;
|
index->ind_type |= DICT_CLUSTERED;
|
||||||
} else if (key->flags & HA_FULLTEXT) {
|
} else if (key->flags & HA_FULLTEXT) {
|
||||||
DBUG_ASSERT(!(key->flags & HA_KEYFLAG_MASK
|
DBUG_ASSERT(!(key->flags & HA_KEYFLAG_MASK
|
||||||
@ -1909,14 +1910,9 @@ innobase_create_key_defs(
|
|||||||
ulint primary_key_number;
|
ulint primary_key_number;
|
||||||
|
|
||||||
if (new_primary) {
|
if (new_primary) {
|
||||||
if (n_add == 0) {
|
DBUG_ASSERT(n_add || got_default_clust);
|
||||||
DBUG_ASSERT(got_default_clust);
|
DBUG_ASSERT(n_add || !altered_table->s->primary_key);
|
||||||
DBUG_ASSERT(altered_table->s->primary_key
|
primary_key_number = altered_table->s->primary_key;
|
||||||
== 0);
|
|
||||||
primary_key_number = 0;
|
|
||||||
} else {
|
|
||||||
primary_key_number = *add;
|
|
||||||
}
|
|
||||||
} else if (got_default_clust) {
|
} else if (got_default_clust) {
|
||||||
/* Create the GEN_CLUST_INDEX */
|
/* Create the GEN_CLUST_INDEX */
|
||||||
index_def_t* index = indexdef++;
|
index_def_t* index = indexdef++;
|
||||||
|
@ -1595,6 +1595,7 @@ innobase_create_index_def(
|
|||||||
|
|
||||||
if (key_clustered) {
|
if (key_clustered) {
|
||||||
DBUG_ASSERT(!(key->flags & HA_FULLTEXT));
|
DBUG_ASSERT(!(key->flags & HA_FULLTEXT));
|
||||||
|
DBUG_ASSERT(key->flags & HA_NOSAME);
|
||||||
index->ind_type |= DICT_CLUSTERED;
|
index->ind_type |= DICT_CLUSTERED;
|
||||||
} else if (key->flags & HA_FULLTEXT) {
|
} else if (key->flags & HA_FULLTEXT) {
|
||||||
DBUG_ASSERT(!(key->flags & HA_KEYFLAG_MASK
|
DBUG_ASSERT(!(key->flags & HA_KEYFLAG_MASK
|
||||||
@ -1910,14 +1911,9 @@ innobase_create_key_defs(
|
|||||||
ulint primary_key_number;
|
ulint primary_key_number;
|
||||||
|
|
||||||
if (new_primary) {
|
if (new_primary) {
|
||||||
if (n_add == 0) {
|
DBUG_ASSERT(n_add || got_default_clust);
|
||||||
DBUG_ASSERT(got_default_clust);
|
DBUG_ASSERT(n_add || !altered_table->s->primary_key);
|
||||||
DBUG_ASSERT(altered_table->s->primary_key
|
primary_key_number = altered_table->s->primary_key;
|
||||||
== 0);
|
|
||||||
primary_key_number = 0;
|
|
||||||
} else {
|
|
||||||
primary_key_number = *add;
|
|
||||||
}
|
|
||||||
} else if (got_default_clust) {
|
} else if (got_default_clust) {
|
||||||
/* Create the GEN_CLUST_INDEX */
|
/* Create the GEN_CLUST_INDEX */
|
||||||
index_def_t* index = indexdef++;
|
index_def_t* index = indexdef++;
|
||||||
|
Reference in New Issue
Block a user