mirror of
https://github.com/MariaDB/server.git
synced 2025-09-08 06:27:57 +03:00
Reason for the change was that ha_notify_table_changed() was done after table open when .frm had been replaced, which caused failure in engines that checks on open if .frm matches the engines table definition. Other changes: - Remove not needed open/close call at end of inline alter table. Some test that depended on the table beeing in the table cache after ALTER TABLE had to be updated.
57 lines
1.6 KiB
Plaintext
57 lines
1.6 KiB
Plaintext
--source include/have_innodb.inc
|
|
|
|
#
|
|
# BUG#22469660 INNODB DOESN'T UPDATE INDEX STATS WHEN ADDING OR DROPPING VIRTUAL COLUMN
|
|
#
|
|
|
|
CREATE TABLE t (
|
|
a INT,
|
|
b INT,
|
|
c INT GENERATED ALWAYS AS(a+b),
|
|
d INT GENERATED ALWAYS AS(a+b+b),
|
|
KEY idxa (a),
|
|
KEY vidxcd (c, d)
|
|
) ENGINE=INNODB STATS_PERSISTENT=1 STATS_AUTO_RECALC=1;
|
|
|
|
INSERT INTO t (a,b) VALUES (1, 2);
|
|
|
|
SELECT index_name, stat_name, stat_description
|
|
FROM mysql.innodb_index_stats
|
|
WHERE database_name = 'test' AND table_name = 't';
|
|
|
|
ALTER TABLE t ADD COLUMN e INT GENERATED ALWAYS AS(a+a+b), ADD INDEX idxb (b), ALGORITHM=INPLACE;
|
|
select count(*) from t;
|
|
|
|
SELECT index_name, stat_name, stat_description
|
|
FROM mysql.innodb_index_stats
|
|
WHERE database_name = 'test' AND table_name = 't';
|
|
|
|
ALTER TABLE t DROP COLUMN c, DROP INDEX idxa, ALGORITHM=INPLACE;
|
|
select count(*) from t;
|
|
|
|
SELECT index_name, stat_name, stat_description
|
|
FROM mysql.innodb_index_stats
|
|
WHERE database_name = 'test' AND table_name = 't';
|
|
|
|
ALTER TABLE t ADD INDEX vidxe (e), ALGORITHM=INPLACE;
|
|
select count(*) from t;
|
|
|
|
SELECT index_name, stat_name, stat_description
|
|
FROM mysql.innodb_index_stats
|
|
WHERE database_name = 'test' AND table_name = 't';
|
|
|
|
ALTER TABLE t ADD COLUMN f INT GENERATED ALWAYS AS(a + a), ADD INDEX vidxf (f), ALGORITHM=INPLACE;
|
|
select count(*) from t;
|
|
|
|
SELECT index_name, stat_name, stat_description
|
|
FROM mysql.innodb_index_stats
|
|
WHERE database_name = 'test' AND table_name = 't';
|
|
|
|
ALTER TABLE t DROP INDEX vidxcd;
|
|
|
|
SELECT index_name, stat_name, stat_description
|
|
FROM mysql.innodb_index_stats
|
|
WHERE database_name = 'test' AND table_name = 't';
|
|
|
|
DROP TABLE t;
|