Commit 5fb4e4ab authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-18149 Crash after DROP COLUMN of AUTO_INCREMENT column on nonempty table

commit_cache_norebuild(): Restore the MDEV-17901 fix that was reverted
as part of the MDEV-18076/MDEV-18077 fix. It was not redundant after all.
parent 9dc81d2a
...@@ -578,6 +578,15 @@ id f ...@@ -578,6 +578,15 @@ id f
1 NULL 1 NULL
2 NULL 2 NULL
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, f INT, KEY(id)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
INSERT INTO t1 SET f=NULL;
ALTER TABLE t1 DROP COLUMN id;
INSERT INTO t1 SET f=NULL;
SELECT * FROM t1;
f
NULL
NULL
DROP TABLE t1;
CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
ALTER TABLE t1 DROP COLUMN f; ALTER TABLE t1 DROP COLUMN f;
INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (1);
...@@ -1239,6 +1248,15 @@ id f ...@@ -1239,6 +1248,15 @@ id f
1 NULL 1 NULL
2 NULL 2 NULL
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, f INT, KEY(id)) ENGINE=InnoDB ROW_FORMAT=COMPACT;
INSERT INTO t1 SET f=NULL;
ALTER TABLE t1 DROP COLUMN id;
INSERT INTO t1 SET f=NULL;
SELECT * FROM t1;
f
NULL
NULL
DROP TABLE t1;
CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) ENGINE=InnoDB ROW_FORMAT=COMPACT; CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) ENGINE=InnoDB ROW_FORMAT=COMPACT;
ALTER TABLE t1 DROP COLUMN f; ALTER TABLE t1 DROP COLUMN f;
INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (1);
...@@ -1900,6 +1918,15 @@ id f ...@@ -1900,6 +1918,15 @@ id f
1 NULL 1 NULL
2 NULL 2 NULL
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, f INT, KEY(id)) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
INSERT INTO t1 SET f=NULL;
ALTER TABLE t1 DROP COLUMN id;
INSERT INTO t1 SET f=NULL;
SELECT * FROM t1;
f
NULL
NULL
DROP TABLE t1;
CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE t1 DROP COLUMN f; ALTER TABLE t1 DROP COLUMN f;
INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (1);
...@@ -2042,5 +2069,5 @@ SELECT variable_value-@old_instant instants ...@@ -2042,5 +2069,5 @@ SELECT variable_value-@old_instant instants
FROM information_schema.global_status FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column'; WHERE variable_name = 'innodb_instant_alter_column';
instants instants
155 158
SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency;
...@@ -447,6 +447,14 @@ ALTER TABLE t1 ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST, ADD KEY(id); ...@@ -447,6 +447,14 @@ ALTER TABLE t1 ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST, ADD KEY(id);
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
# MDEV-18149 Crash after DROP COLUMN of AUTO_INCREMENT column on nonempty table
eval CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, f INT, KEY(id)) $engine;
INSERT INTO t1 SET f=NULL;
ALTER TABLE t1 DROP COLUMN id;
INSERT INTO t1 SET f=NULL;
SELECT * FROM t1;
DROP TABLE t1;
# MDEV-18076/MDEV-18077 Crash on AUTO_INCREMENT column after instant DROP # MDEV-18076/MDEV-18077 Crash on AUTO_INCREMENT column after instant DROP
eval CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) $engine; eval CREATE TABLE t1(f INT, k INT NOT NULL AUTO_INCREMENT, KEY(k)) $engine;
ALTER TABLE t1 DROP COLUMN f; ALTER TABLE t1 DROP COLUMN f;
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2005, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2005, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2013, 2018, MariaDB Corporation. Copyright (c) 2013, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -10359,6 +10359,10 @@ commit_cache_norebuild( ...@@ -10359,6 +10359,10 @@ commit_cache_norebuild(
} }
} }
} }
if (!ctx->instant_table->persistent_autoinc) {
ctx->new_table->persistent_autoinc = 0;
}
} }
if (ha_alter_info->handler_flags & ALTER_COLUMN_UNVERSIONED) { if (ha_alter_info->handler_flags & ALTER_COLUMN_UNVERSIONED) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment