mariadb/mysql-test/main/repair.test
Alexander Barkov 36eba98817 MDEV-19123 Change default charset from latin1 to utf8mb4
Changing the default server character set from latin1 to utf8mb4.
2024-07-11 10:21:07 +04:00

311 lines
8.7 KiB
Text

#
# Test of repair table
#
--source include/have_sequence.inc
--source include/default_charset.inc
--source include/have_innodb.inc
call mtr.add_suppression("character set is multi-byte");
call mtr.add_suppression("exists only for compatibility");
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1 SELECT 1,"table 1";
repair table t1 use_frm;
alter table t1 ENGINE=HEAP;
repair table t1 use_frm;
drop table t1;
#
# disabled keys during repair
#
create table t1(id int PRIMARY KEY, st varchar(10), KEY st_key(st)) CHARSET=latin1;
insert into t1 values(1, "One");
alter table t1 disable keys;
show keys from t1;
repair table t1 extended;
show keys from t1;
drop table t1;
# non-existent table
repair table t1 use_frm;
create table t1 engine=myisam SELECT 1,"table 1";
flush tables;
let $MYSQLD_DATADIR= `select @@datadir`;
system echo 1 > $MYSQLD_DATADIR/test/t1.MYI ;
repair table t1;
repair table t1 use_frm;
drop table t1;
#
# BUG#18874 - Setting myisam_repair_threads > 1, index cardinality always 1
#
CREATE TABLE t1(a INT, KEY(a));
INSERT INTO t1 VALUES(1),(2),(3),(4),(5);
SET myisam_repair_threads=2;
REPAIR TABLE t1;
SHOW INDEX FROM t1;
SET myisam_repair_threads=@@global.myisam_repair_threads;
DROP TABLE t1;
#
# BUG#22562 - REPAIR TABLE .. USE_FRM causes server crash on Windows and
# server hangs on Linux
#
CREATE TABLE t1(a INT);
USE mysql;
REPAIR TABLE test.t1 USE_FRM;
USE test;
DROP TABLE t1;
#
# BUG#23175 - MYISAM crash/repair failed during repair
#
CREATE TABLE t1(a CHAR(255), KEY(a)) CHARSET=latin1;
SET myisam_sort_buffer_size=4096;
--replace_regex /Current myisam_sort_buffer_size.*/X/
INSERT INTO t1 VALUES
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0');
SET myisam_repair_threads=2;
--replace_regex /Current myisam_sort_buffer_size.*/X/
REPAIR TABLE t1;
SET myisam_repair_threads=@@global.myisam_repair_threads;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
DROP TABLE t1;
#
# BUG#31174 - "Repair" command on MyISAM crashes with small
# myisam_sort_buffer_size
#
CREATE TABLE t1(a CHAR(255), KEY(a)) CHARSET=latin1;
SET myisam_sort_buffer_size=4496;
INSERT INTO t1 VALUES
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
('0'),('0'),('0'),('0'),('0'),('0'),('0');
SET myisam_repair_threads=2;
REPAIR TABLE t1;
SET myisam_repair_threads=@@global.myisam_repair_threads;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
DROP TABLE t1;
--echo # End of 4.1 tests
#
# BUG#36055 - mysql_upgrade doesn't really 'upgrade' tables
#
--echo # Test with a saved table from 4.1
let $MYSQLD_DATADIR= `select @@datadir`;
--copy_file std_data/bug36055.frm $MYSQLD_DATADIR/test/t1.frm
--copy_file std_data/bug36055.MYD $MYSQLD_DATADIR/test/t1.MYD
--copy_file std_data/bug36055.MYI $MYSQLD_DATADIR/test/t1.MYI
--replace_column 12 # 13 #
SHOW TABLE STATUS LIKE 't1';
SELECT * FROM t1;
--echo # Run CHECK TABLE, it should indicate table need a ALTER TABLE
CHECK TABLE t1 FOR UPGRADE;
--echo # REPAIR old table USE_FRM should fail
REPAIR TABLE t1 USE_FRM;
--echo # Run REPAIR TABLE to upgrade .frm file
REPAIR TABLE t1;
--replace_column 12 # 13 #
SHOW TABLE STATUS LIKE 't1';
SELECT * FROM t1;
REPAIR TABLE t1 USE_FRM;
SELECT * FROM t1;
DROP TABLE t1;
--copy_file std_data/bug36055.frm $MYSQLD_DATADIR/test/t1.frm
--copy_file std_data/bug36055.MYD $MYSQLD_DATADIR/test/t1.MYD
--copy_file std_data/bug36055.MYI $MYSQLD_DATADIR/test/t1.MYI
ALTER TABLE t1 FORCE;
CHECK TABLE t1;
DROP TABLE t1;
--echo # End of 5.0 tests
#
# Bug#18775 - Temporary table from alter table visible to other threads
#
# REPAIR TABLE ... USE_FRM on temporary table crashed the table or server.
--disable_warnings
DROP TABLE IF EXISTS tt1;
--enable_warnings
CREATE TEMPORARY TABLE tt1 (c1 INT);
REPAIR TABLE tt1 USE_FRM;
DROP TABLE tt1;
--echo #
--echo # Bug #48248 assert in MDL_ticket::upgrade_shared_lock_to_exclusive
--echo #
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1(a INT);
LOCK TABLES t1 READ;
REPAIR TABLE t1;
UNLOCK TABLES;
DROP TABLE t1;
--echo #
--echo # Test for bug #50784 "MDL: Assertion `m_tickets.is_empty() ||
--echo # m_tickets.front() == m_trans_sentinel'"
--echo #
--disable_warnings
drop tables if exists t1, t2;
--enable_warnings
create table t1 (i int);
create table t2 (j int);
set @@autocommit= 0;
repair table t1, t2;
set @@autocommit= default;
drop tables t1, t2;
--echo #
--echo # Check that we have decent error messages when using crashed
--echo # .frm file from MySQL 3.23
--echo #
--echo # Test with a saved table from 3.23
let $MYSQLD_DATADIR= `select @@datadir`;
SET @save_global_collation_server= @@global.collation_server;
set @@global.collation_server=@@collation_server;
--copy_file std_data/host_old.frm $MYSQLD_DATADIR/test/t1.frm
--copy_file std_data/host_old.MYD $MYSQLD_DATADIR/test/t1.MYD
--copy_file std_data/host_old.MYI $MYSQLD_DATADIR/test/t1.MYI
--error ER_GET_ERRNO
select count(*) from t1;
check table t1;
repair table t1;
repair table t1 use_frm;
select count(*) from t1;
check table t1;
alter table t1 force;
check table t1;
drop table t1;
set @@global.collation_server=@save_global_collation_server;
#
# MDEV-8115 mysql_upgrade crashes the server with REPAIR VIEW
#
create table t1 (a blob);
create view v1 as select * from t1;
repair view v1;
drop view v1;
drop table t1;
--echo # End of 5.5 tests
#
# MDEV-11539 test_if_reopen: Assertion `strcmp(share->unique_file_name,filename) || share->last_version' failed upon select from I_S
#
--disable_view_protocol
CREATE TABLE t1 (i INT) ENGINE=MyISAM;
INSERT t1 VALUES (1);
LOCK TABLE t1 WRITE;
REPAIR TABLE t1;
--disable_result_log
SELECT * FROM INFORMATION_SCHEMA.TABLES;
--enable_result_log
SELECT * FROM t1;
UNLOCK TABLES;
DROP TABLE t1;
--enable_view_protocol
--echo # End of 10.0 tests
#
# MDEV-17153 server crash on repair table ... use_frm
#
# Note, this test case doesn't crash, but shows spurios warnings
# unless the bug is fixed
#
create table t1 (a int, b varchar(200));
insert t1 select seq, repeat(200, seq) from seq_1_to_30;
delete from t1 where a % 13 = 0;
repair table t1 use_frm;
delete from t1 where a % 11 = 0;
repair table t1 extended use_frm;
delete from t1 where a % 7 = 0;
set myisam_repair_threads = 2;
repair table t1 use_frm;
set myisam_repair_threads = default;
drop table t1;
--echo # End of 10.2 tests
--echo #
--echo # MDEV-33737 The way of ignoring alter-algorithm is inconsistent with
--echo # other options and with itself
--echo #
query_vertical select * from information_schema.system_variables where variable_name = 'ALTER_ALGORITHM';
set alter_algorithm=COPY;
select @@alter_algorithm;
set statement alter_algorithm=COPY FOR SELECT @@alter_algorithm;
--let $restart_parameters= --alter-algorithm=COPY
--source include/restart_mysqld.inc
select @@alter_algorithm;
--echo #
--echo # MDEV-33826 Assertion `tl->table == __null' failed in
--echo # THD::open_temporary_table
--echo #
CREATE TABLE t1 (i INT) ENGINE=InnoDB;
CREATE TABLE t2 (i INT) ENGINE=InnoDB;
CREATE TEMPORARY TABLE t3 (i INT);
REPAIR TABLE t1,t2,t3;
DROP TABLE t1,t2,t3;
--echo # End of 11.5 tests