--source include/have_sequence.inc --source include/have_innodb.inc drop table if exists t1; --echo # --echo # Test alter sequence --echo # --disable_ps2_protocol CREATE SEQUENCE t1 nocache engine=myisam; select * from t1; select next value for t1; alter sequence t1 start=50; show create sequence t1; select * from t1; select next value for t1; alter sequence t1 minvalue=-100; show create sequence t1; select * from t1; --error ER_SEQUENCE_INVALID_DATA alter sequence t1 minvalue=100 start=100; alter sequence t1 minvalue=100 start=100 restart=100; show create sequence t1; select * from t1; alter sequence t1 maxvalue=500; show create sequence t1; select * from t1; drop sequence t1; CREATE SEQUENCE t1 engine=myisam; alter sequence t1 nocache; show create sequence t1; alter sequence t1 cache=100; flush tables; show create sequence t1; alter sequence t1 nocache; show create sequence t1; flush tables; show create sequence t1; select * from t1; select next value for t1; select next value for t1; select next value for t1; select next_not_cached_value, cycle_count from t1; drop sequence t1; CREATE SEQUENCE t1 maxvalue=100 engine=myisam; alter sequence t1 no maxvalue; show create sequence t1; select * from t1; alter sequence t1 cycle; show create sequence t1; alter sequence t1 nocycle; alter sequence t1 start=15 restart minvalue=10 maxvalue=20 cycle; show create sequence t1; select * from t1; select NEXT VALUE for t1 from seq_1_to_10; alter sequence t1 restart with 17 minvalue=10 maxvalue=20 cycle; select NEXT VALUE for t1 from seq_1_to_10; drop sequence t1; CREATE SEQUENCE t1 maxvalue=100; alter sequence t1 increment=-2 start with 50 minvalue=-100; show create sequence t1; select * from t1; select NEXT VALUE for t1 from seq_1_to_10; drop sequence t1; --echo # --echo # InnoDB (some things work different with InnoDB) --echo CREATE SEQUENCE t1 cache 10 engine=innodb; select * from t1; select next value for t1; alter sequence t1 start=100; show create sequence t1; select * from t1; select next value for t1; drop sequence t1; --echo # --echo # ALTER TABLE --echo # CREATE SEQUENCE t1 engine=innodb; select next value for t1; alter table t1 rename t2; select next value for t2; rename table t2 to t1; select next value for t1; alter table t1 comment="foo"; show create sequence t1; alter table t1 engine=myisam; show create sequence t1; alter table t1 engine=innodb; show create sequence t1; select * from t1; drop sequence t1; # # Some error testing # CREATE SEQUENCE t1 engine=myisam; --error ER_SEQUENCE_INVALID_DATA alter sequence t1 minvalue=100; drop sequence t1; CREATE SEQUENCE t1 engine=myisam; --error ER_SEQUENCE_INVALID_DATA alter sequence t1 minvalue=25 maxvalue=20; drop sequence t1; create table t1 (a int); --error ER_NOT_SEQUENCE alter sequence t1 minvalue=100; drop table t1; --echo # --echo # MDEV-32795: ALTER SEQUENCE IF NOT EXISTS non_existing_seq Errors rather than note --echo # alter sequence if exists t1 minvalue=100; --error ER_UNKNOWN_SEQUENCES alter sequence t1 minvalue=100; create sequence t1; --error ER_PARSE_ERROR alter sequence t1; drop sequence t1; CREATE SEQUENCE t1 maxvalue=100; alter sequence t1 increment=-2 start with 50; select next value for t1; --error ER_SEQUENCE_RUN_OUT select next value for t1; select * from t1; alter sequence t1 restart; select next value for t1; alter sequence t1 restart with 90; select next value for t1; drop sequence t1; # # MDEV-19977 Assertion `(0xFUL & mode) == LOCK_S || (0xFUL & mode) == LOCK_X' # failed in lock_rec_lock # CREATE SEQUENCE t1 engine=innodb; --error ER_SEQUENCE_INVALID_TABLE_STRUCTURE ALTER IGNORE TABLE t1 ADD CHECK (start_value < minimum_value); DROP SEQUENCE t1; # # MDEV-19320 Sequence gets corrupted and produces ER_KEY_NOT_FOUND (Can't # find record) after ALTER .. ORDER BY # CREATE SEQUENCE s; --error ER_SEQUENCE_INVALID_TABLE_STRUCTURE ALTER TABLE s ORDER BY cache_size; SELECT NEXTVAL(s); DROP SEQUENCE s; --echo # --echo # MDEV-33169 Alter sequence 2nd ps fails while alter sequence 2nd time (no ps) succeeds --echo # create sequence s; show create sequence s; alter sequence s maxvalue 123; show create sequence s; alter sequence s maxvalue 123; show create sequence s; drop sequence s; create sequence s; show create sequence s; prepare stmt from 'alter sequence s maxvalue 123'; execute stmt; show create sequence s; execute stmt; show create sequence s; deallocate prepare stmt; drop sequence s; create sequence s; show create sequence s; create procedure p() alter sequence s maxvalue 123; call p; show create sequence s; call p; show create sequence s; drop procedure p; drop sequence s; --echo # --echo # End of 10.4 tests --echo # --echo # --echo # MDEV-32350 Can't selectively restore sequences using innodb tables from --echo # backup --echo # --disable_ps_protocol create sequence s2 engine=innodb; alter table s2 discard tablespace; --error ER_GET_ERRNO SELECT NEXTVAL(s2); create sequence s1 engine=innodb; select * from s1; flush tables s1 for export; --let $MYSQLD_DATADIR= `select @@datadir` --move_file $MYSQLD_DATADIR/test/s1.cfg $MYSQLD_DATADIR/test/s2.cfg --copy_file $MYSQLD_DATADIR/test/s1.ibd $MYSQLD_DATADIR/test/s2.ibd unlock tables; --error ER_GET_ERRNO select * from s2; --error ER_GET_ERRNO SELECT NEXTVAL(s2); --error ER_GET_ERRNO alter sequence s2 restart; alter table s2 import tablespace; select * from s2; SELECT NEXTVAL(s2); select NEXTVAL(s1); flush table s1,s2; select * from s1; select * from s2; drop sequence s1,s2; --enable_ps_protocol --echo # --echo # MDEV-35144 CREATE TABLE ... LIKE uses current innodb_compression_default instead of the create value --echo # set @@innodb_compression_default= off; create or replace sequence s engine=innodb; set @@innodb_compression_default= on; create or replace table s_import like s; show create table s; show create table s_import; alter table s_import discard tablespace; flush table s for export; --copy_file $MYSQLD_DATADIR/test/s.ibd $MYSQLD_DATADIR/test/s_import.ibd --copy_file $MYSQLD_DATADIR/test/s.cfg $MYSQLD_DATADIR/test/s_import.cfg UNLOCK TABLES; alter table s_import import tablespace; drop table s,s_import; --echo # End of 10.5 tests --echo # --echo # MDEV-31607 ER_DUP_KEY in mysql.table_stats upon REANME on sequence --echo # CREATE SEQUENCE s1 ENGINE=InnoDB; CREATE SEQUENCE s2 ENGINE=InnoDB; SHOW CREATE SEQUENCE s1; SHOW CREATE SEQUENCE s2; DROP SEQUENCE s2; RENAME TABLE s1 TO s2; DROP SEQUENCE s2; --echo # --echo # End of 10.6 tests --echo # --echo # --echo # MDEV-28152 Features for sequence --echo # # truncation in alter sequence create sequence s maxvalue 12345; show create sequence s; alter sequence s maxvalue 123456789012345678901234; show create sequence s; drop sequence s; # alter first from a narrower type to a wider type, then maxvalue create sequence s as tinyint; show create sequence s; show create table s; alter sequence s as int; show create sequence s; show create table s; alter sequence s maxvalue 12345; show create sequence s; show create table s; drop sequence s; # alter first maxvalue then from a wider type to a narrower type create sequence s; show create sequence s; show create table s; alter sequence s maxvalue 123; show create sequence s; show create table s; alter sequence s as tinyint; show create sequence s; show create table s; drop sequence s; # from a wider type to a narrower type with out of range values create sequence s as int; show create sequence s; show create table s; --error ER_WARN_DATA_OUT_OF_RANGE alter sequence s as tinyint; alter sequence s maxvalue 126; alter sequence s as tinyint; drop sequence s; # cannot alter both value type and something else yet. create sequence s as tinyint; show create sequence s; show create table s; --error ER_NOT_SUPPORTED_YET alter sequence s as int maxvalue 123; drop sequence s; # alter sequence causes discarding of cache values ## alter type then next create sequence s as smallint; select next value for s; # 1 alter sequence s as int; select next value for s; # 1001 drop sequence s; ## alter a tinyint sequence create sequence s as tinyint; select next value for s; # 1 alter sequence s cache 100; --error ER_SEQUENCE_RUN_OUT select next value for s; drop sequence s; # from signed to unsigned create sequence s as int; show create sequence s; show create table s; alter sequence s as int unsigned; show create sequence s; show create table s; drop sequence s; # for each type create sequence s as tinyint; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 126; show create sequence s; select next value for s; alter sequence s maxvalue 63; show create sequence s; #fixme: should not run out --error ER_SEQUENCE_RUN_OUT select next value for s; drop sequence s; create sequence s as tinyint unsigned; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 254; show create sequence s; select next value for s; alter sequence s maxvalue 120; show create sequence s; #fixme: should not run out --error ER_SEQUENCE_RUN_OUT select next value for s; drop sequence s; create sequence s as smallint; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 32766; show create sequence s; select next value for s; alter sequence s maxvalue 16030; show create sequence s; select next value for s; drop sequence s; create sequence s as smallint unsigned; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 65534; show create sequence s; select next value for s; alter sequence s maxvalue 32000; show create sequence s; select next value for s; drop sequence s; create sequence s as mediumint; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 8388606; show create sequence s; select next value for s; alter sequence s maxvalue 4223212; show create sequence s; select next value for s; drop sequence s; create sequence s as mediumint unsigned; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 16777214; show create sequence s; select next value for s; alter sequence s maxvalue 8389231; show create sequence s; select next value for s; drop sequence s; create sequence s as int; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 2147483646; show create sequence s; select next value for s; alter sequence s maxvalue 1234567890; show create sequence s; select next value for s; drop sequence s; create sequence s as int unsigned; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 4294967294; show create sequence s; select next value for s; alter sequence s maxvalue 2123834923; show create sequence s; select next value for s; drop sequence s; create sequence s as bigint; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 9223372036854775806; show create sequence s; select next value for s; alter sequence s maxvalue 4683883928492758294; show create sequence s; select next value for s; drop sequence s; create sequence s as bigint unsigned; alter sequence s maxvalue 123456789012345678901; show create sequence s; alter sequence s maxvalue 18446744073709551614; show create sequence s; select next value for s; alter sequence s maxvalue 9432738420582397432; show create sequence s; select next value for s; drop sequence s; --echo # --echo # MDEV-33739 Assertion `0' failed in Type_handler_typelib::max_display_length_for_field --echo # CREATE SEQUENCE s1 ; --error ER_SEQUENCE_INVALID_TABLE_STRUCTURE ALTER table s1 CHANGE `next_not_cached_value` next_not_cached_value SET('1','2','3','4','5','6','7','8','9','10'); --error ER_SEQUENCE_INVALID_TABLE_STRUCTURE ALTER table s1 CHANGE `next_not_cached_value` next_not_cached_value bool; drop sequence s1; --enable_ps2_protocol --echo # --echo # End of 11.5 test --echo #