mariadb/mysql-test/suite/sql_sequence/aria.result
Yuchen Pei d52ddae57b
MDEV-22491 Support mariadb-check and CHECK TABLE with SEQUENCE
The check go through the following steps:

1. Run check on the underlying engine. If not ok, then return.
2. Check that there's only one row in the table, and
   2.1 warn if more than one row
   2.2 return HA_ADMIN_CORRUPT if fewer than one row (i.e. 0 rows)
3. If the sequence is not initialised (e.g. after an ALTER TABLE ...
   SEQUENCE=1), initialise the sequence by reading the sequence
   metadata from the table. This will also flush the next_free_value,
   i.e. set it to the next not cached value (SEQUENCE::reserved_until)
4. Check that the sequence metadata is valid, i.e. nothing out of
   order e.g. minvalue < maxvalue etc. If invalid it reports
   HA_ERR_SEQUENCE_INVALID_DATA
5. Check that the sequence has not been exhausted. It reports
   ER_SEQUENCE_RUN_OUT as a warning if and only if a SELECT NEXTVAL
   would do so

Limitations:

1. The check is independent of flags, so the vanilla check is the same
   as CHECK ... EXTENDED or CHECK ... FOR UPGRADE etc.
2. When the check discovers invalid metadata from the table,
   subsequent SELECT NEXTVAL will carry on (or fail) without this
   piece of knowledge, independent of the CHECK. This is to ensure
   consistency, i.e. CHECK does not modify behaviour of SELECT, and if
   anything it makes more sense that SELECT reports
   HA_ERR_SEQUENCE_INVALID_DATA in this case, regardless of prior
   CHECK
2025-05-05 11:36:55 +10:00

66 lines
1.3 KiB
Text

set @@default_storage_engine="aria";
CREATE SEQUENCE t1 cache=10;
show create sequence t1;
Table Create Table
t1 CREATE SEQUENCE `t1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 10 nocycle ENGINE=Aria
select NEXT VALUE for t1,seq from seq_1_to_20;
NEXT VALUE for t1 seq
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
select * from t1;
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
21 1 9223372036854775806 1 1 10 0 0
drop sequence t1;
create sequence s1;
check table s1;
Table Op Msg_type Msg_text
test.s1 check status OK
select next value for s1;
next value for s1
1
flush tables;
check table s1;
Table Op Msg_type Msg_text
test.s1 check status OK
select next value for s1;
next value for s1
1001
flush tables;
repair table s1;
Table Op Msg_type Msg_text
test.s1 repair status OK
select next value for s1;
next value for s1
2001
drop sequence s1;
CREATE SEQUENCE t1;
alter sequence t1 minvalue=100;
ERROR HY000: Sequence 'test.t1' has out of range value for options
alter sequence t1 minvalue=100 start=100 restart=100;
rename table t1 to t2;
select next value for t2;
next value for t2
100
alter table t2 rename to t1;
select next value for t1;
next value for t1
1100
drop table t1;