mirror of
https://github.com/MariaDB/server.git
synced 2025-04-09 08:45:33 +02:00

Problem: ======== - dict_stats_table_clone_create() does not initialize the flag stats_error_printed in either dict_table_t or dict_index_t. Because dict_stats_save_index_stat() is operating on a copy of a dict_index_t object, it appears that dict_index_t::stats_error_printed will always be false for actual metadata objects, and uninitialized in dict_stats_save_index_stat(). Solution: ========= dict_stats_table_clone_create(): Assign stats_error_printed for table and index while copying the statistics
30 lines
869 B
Text
30 lines
869 B
Text
source include/have_innodb.inc;
|
|
|
|
#
|
|
# MDEV-20354 All but last insert ignored in InnoDB tables when table locked
|
|
#
|
|
rename table mysql.table_stats to mysql.table_stats_save;
|
|
flush tables;
|
|
set use_stat_tables= PREFERABLY;
|
|
create table t1 (a int) engine=InnoDB;
|
|
start transaction;
|
|
insert t1 values (1);
|
|
insert t1 values (2);
|
|
commit;
|
|
select * from t1;
|
|
drop table t1;
|
|
rename table mysql.table_stats_save to mysql.table_stats;
|
|
flush tables;
|
|
|
|
--echo #
|
|
--echo # MDEV-32667 dict_stats_save_index_stat() reads uninitialized
|
|
--echo # index->stats_error_printed
|
|
--echo #
|
|
call mtr.add_suppression("InnoDB: Cannot save index statistics for table");
|
|
CREATE TABLE t1(a INT) ENGINE=InnoDB STATS_PERSISTENT=1 STATS_AUTO_RECALC=1;
|
|
BEGIN;
|
|
SELECT COUNT(*)>=0 FROM mysql.innodb_index_stats LOCK IN SHARE MODE;
|
|
INSERT INTO t1 VALUES(0),(0);
|
|
SELECT sleep(1);
|
|
COMMIT;
|
|
DROP TABLE t1;
|