mariadb/mysql-test/suite/sql_sequence/check.result
Thirunarayanan Balathandayuthapani 6a2afb42ba MDEV-36487 Fix ha_innobase::check() for sequences
InnoDB does the following check for sequence table during check
table command:
- There should be only one index should exist on sequence table
- There should be only one row should exist on sequence table
- The leaf page must be the root page for the sequence table
- Delete marked record should not exist
- DB_TRX_ID and DB_ROLL_PTR of the record should be 0 and 1U << 55
2025-06-09 13:52:44 +05:30

147 lines
4 KiB
Text

create sequence s;
call mtr.add_suppression("ha_myisam");
call mtr.add_suppression("Checking table");
check table s;
Table Op Msg_type Msg_text
test.s check error Size of datafile is: 4 Should be: 58
test.s check error Corrupt
drop table s;
create sequence s;
insert into s values (3,1,9223372036854775806,1,1,1000,0,0);
select * from s;
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
3 1 9223372036854775806 1 1 1000 0 0
check table s;
Table Op Msg_type Msg_text
test.s check status OK
select nextval(s);
nextval(s)
3
drop sequence s;
CREATE SEQUENCE s;
ALTER TABLE s sequence=0;
insert into s values (3,1,9223372036854775806,1,1,1000,0,0);
FLUSH TABLES;
CHECK TABLE s;
Table Op Msg_type Msg_text
test.s check Warning More than one row in the table
test.s check status OK
DROP SEQUENCE s;
CREATE SEQUENCE s;
ALTER TABLE s sequence=0;
delete from s;
FLUSH TABLES;
CHECK TABLE s;
Table Op Msg_type Msg_text
test.s check Error Fewer than one row in the table
test.s check error Corrupt
DROP SEQUENCE s;
CREATE SEQUENCE s;
ALTER TABLE s sequence=0;
update s set minimum_value=200, maximum_value=100;
FLUSH TABLES;
CHECK TABLE s;
Table Op Msg_type Msg_text
test.s check Error Sequence 'test.s' has out of range value for options
test.s check error Corrupt
DROP SEQUENCE s;
create sequence s minvalue 13 maxvalue 15 increment by 4;
check table s;
Table Op Msg_type Msg_text
test.s check status OK
select nextval(s);
nextval(s)
13
check table s;
Table Op Msg_type Msg_text
test.s check Warning Sequence 'test.s' has run out
test.s check status OK
alter sequence s cycle;
check table s;
Table Op Msg_type Msg_text
test.s check status OK
alter sequence s nocycle;
check table s;
Table Op Msg_type Msg_text
test.s check Warning Sequence 'test.s' has run out
test.s check status OK
alter sequence s increment by 1;
check table s;
Table Op Msg_type Msg_text
test.s check Warning Sequence 'test.s' has run out
test.s check status OK
alter sequence s increment by 4;
select nextval(s);
ERROR HY000: Sequence 'test.s' has run out
alter sequence s cycle;
check table s;
Table Op Msg_type Msg_text
test.s check status OK
alter sequence s maxvalue 23 nocycle;
check table s;
Table Op Msg_type Msg_text
test.s check status OK
alter sequence s maxvalue 15;
check table s;
Table Op Msg_type Msg_text
test.s check Warning Sequence 'test.s' has run out
test.s check status OK
drop sequence s;
create sequence s minvalue 13 maxvalue 20 increment by 1;
select nextval(s);
nextval(s)
13
check table s;
Table Op Msg_type Msg_text
test.s check status OK
select nextval(s);
nextval(s)
14
drop sequence s;
create sequence s minvalue 13 maxvalue 20 increment by 1;
select nextval(s);
nextval(s)
13
alter table s sequence=0;
alter table s sequence=1;
check table s;
Table Op Msg_type Msg_text
test.s check Warning Sequence 'test.s' has run out
test.s check status OK
select nextval(s);
ERROR HY000: Sequence 'test.s' has run out
drop sequence s;
create sequence s;
update s set minimum_value=500, maximum_value=200;
ERROR HY000: Storage engine SEQUENCE of the table `test`.`s` doesn't have this option
drop sequence s;
#
# MDEV-35866 mariadb-check does not return warning for incorrect sequence with engine InnoDB
#
CREATE SEQUENCE s engine=innodb;
ALTER TABLE s sequence=0;
connect prevent_purge,localhost,root;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
delete from s;
FLUSH TABLES;
CHECK TABLE s;
Table Op Msg_type Msg_text
test.s check Warning InnoDB: Encountered delete marked record in sequence table test/s.
test.s check error Corrupt
disconnect prevent_purge;
DROP SEQUENCE s;
CREATE SEQUENCE s engine=innodb;
CHECK TABLE s;
Table Op Msg_type Msg_text
test.s check status OK
DROP SEQUENCE s;
CREATE SEQUENCE s engine=innodb;
ALTER TABLE s sequence=0;
insert into s values (2,1,9223372036854775806,1,1,1000,0,0);
FLUSH TABLES;
CHECK TABLE s;
Table Op Msg_type Msg_text
test.s check Warning InnoDB: Should have only one record in sequence table test/s. But it has 2 records.
test.s check error Corrupt
DROP SEQUENCE s;