mirror of
https://github.com/MariaDB/server.git
synced 2025-07-17 12:02:09 +03:00
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
58 lines
2.5 KiB
Plaintext
58 lines
2.5 KiB
Plaintext
create or replace sequence s1 cache 3;
|
|
select next value for s1, minimum_value from s1 where maximum_value> 1;
|
|
next value for s1 minimum_value
|
|
1 1
|
|
select next value for s1, minimum_value from s1 where maximum_value> 2;
|
|
next value for s1 minimum_value
|
|
2 1
|
|
select next value for s1, minimum_value from s1 where maximum_value> 3;
|
|
next value for s1 minimum_value
|
|
3 1
|
|
select next value for s1, minimum_value from s1 where maximum_value> 4;
|
|
next value for s1 minimum_value
|
|
4 1
|
|
alter sequence s1 maxvalue 1000;
|
|
optimize table s1;
|
|
Table Op Msg_type Msg_text
|
|
test.s1 optimize note The storage engine for the table doesn't support optimize
|
|
analyze table s1;
|
|
Table Op Msg_type Msg_text
|
|
test.s1 analyze note The storage engine for the table doesn't support analyze
|
|
repair table s1;
|
|
Table Op Msg_type Msg_text
|
|
test.s1 repair status OK
|
|
check table s1;
|
|
Table Op Msg_type Msg_text
|
|
test.s1 check status OK
|
|
rename table s1 to tmp_s;
|
|
rename table tmp_s to s1;
|
|
drop sequence s1;
|
|
include/show_binlog_events.inc
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; create or replace sequence s1 cache 3
|
|
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
|
master-bin.000001 # Annotate_rows # # select next value for s1, minimum_value from s1 where maximum_value> 1
|
|
master-bin.000001 # Table_map # # table_id: # (test.s1)
|
|
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|
master-bin.000001 # Query # # COMMIT
|
|
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
|
master-bin.000001 # Annotate_rows # # select next value for s1, minimum_value from s1 where maximum_value> 4
|
|
master-bin.000001 # Table_map # # table_id: # (test.s1)
|
|
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|
master-bin.000001 # Query # # COMMIT
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; alter sequence s1 maxvalue 1000
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; optimize table s1
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; analyze table s1
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; repair table s1
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; rename table s1 to tmp_s
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; rename table tmp_s to s1
|
|
master-bin.000001 # Gtid # # GTID #-#-#
|
|
master-bin.000001 # Query # # use `test`; DROP SEQUENCE `s1` /* generated by server */
|