mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-13626 Merge InnoDB test cases from MySQL 5.7
This imports and adapts a number of MySQL 5.7 test cases that are applicable to MariaDB. Some tests for old bug fixes are not that relevant because the code has been refactored since then (especially starting with MariaDB Server 10.6), and the tests would not reproduce the original bug if the fix was reverted. In the test innodb_fts.opt, there are many duplicate MATCH ranks, which would make the results nondeterministic. The test was stabilized by changing some LIMIT clauses or by adding sorted_result in those cases where the purpose of a test was to show that no sorting took place in the server. In the test innodb_fts.phrase, MySQL 5.7 would generate FTS_DOC_ID that are 1 larger than in MariaDB. In innodb_fts.index_table the difference is 2. This is because in MariaDB, fts_get_next_doc_id() post-increments cache->next_doc_id, while MySQL 5.7 pre-increments it. Reviewed by: Thirunarayanan Balathandayuthapani
This commit is contained in:
@ -15,6 +15,7 @@ ENGINE=INNODB STATS_PERSISTENT=1,STATS_AUTO_RECALC=1;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
||||
INSERT INTO t1 (val) SELECT 4 FROM seq_1_to_16;
|
||||
SET STATEMENT use_stat_tables=never FOR
|
||||
ANALYZE TABLE t1;
|
||||
|
||||
connect(con1, localhost, root,,);
|
||||
@ -85,3 +86,41 @@ SET GLOBAL innodb_stats_include_delete_marked = @saved_include_delete_marked;
|
||||
SET GLOBAL innodb_stats_traditional = @saved_traditional;
|
||||
SET GLOBAL innodb_stats_modified_counter = @saved_modified_counter;
|
||||
SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency;
|
||||
|
||||
#
|
||||
# Bug#12429573 TIMESTAMP COLUMN OF INNODB.INDEX_STATS ARE NOT UPDATED
|
||||
# WHEN RE-RUNNING ANALYZE
|
||||
#
|
||||
CREATE TABLE bug12429573 (i INTEGER PRIMARY KEY, j INTEGER, KEY(j))
|
||||
ENGINE=INNODB STATS_PERSISTENT=1;
|
||||
|
||||
SET STATEMENT use_stat_tables=never FOR
|
||||
ANALYZE TABLE bug12429573;
|
||||
|
||||
# Cannot check the exact timestamp here because it is always different
|
||||
# but at least check that both timestamps in innodb_table_stats and in
|
||||
# innodb_index_stats have been updated to the same value. If the bug is
|
||||
# present this check will fail.
|
||||
|
||||
SELECT last_update INTO @last FROM mysql.innodb_table_stats
|
||||
WHERE table_name = 'bug12429573';
|
||||
SELECT * FROM mysql.innodb_index_stats
|
||||
WHERE table_name = 'bug12429573' AND last_update!=@last;
|
||||
|
||||
# The first ANALYZE would insert timestamp e.g. 17:23:39 in both
|
||||
# innodb_table_stats and innodb_index_stats. The bug is that the second
|
||||
# ANALYZE only updates the timestamp in innodb_table_stats. In order to
|
||||
# check if the timestamp in innodb_index_stats has really been updated we
|
||||
# need it to be different from the previous one (17:23:39) with at least
|
||||
# one second.
|
||||
-- sleep 1
|
||||
|
||||
SET STATEMENT use_stat_tables=never FOR
|
||||
ANALYZE TABLE bug12429573;
|
||||
|
||||
SELECT * FROM mysql.innodb_table_stats
|
||||
WHERE table_name = 'bug12429573' AND last_update=@last;
|
||||
SELECT * FROM mysql.innodb_index_stats
|
||||
WHERE table_name = 'bug12429573' AND last_update=@last;
|
||||
|
||||
DROP TABLE bug12429573;
|
||||
|
Reference in New Issue
Block a user