Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  alter.test  Sprache: unbekannt

 
Spracherkennung für: .test vermutete Sprache: SQL {SQL[121] ABAP[84] Lisp[76]} [Methode: maximale Elemente, drei Dimensionen]

--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;
let $check_innodb_flags =
select flag & 12288 is_sequence from information_schema.innodb_sys_tables
where name='test/t1';
evalp $check_innodb_flags;
alter table t1 sequence=0;
begin;
delete from t1;
rollback;
evalp $check_innodb_flags;
alter table t1 sequence=1;
evalp $check_innodb_flags;
alter table t1 sequence=0, algorithm=copy;
evalp $check_innodb_flags;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t1 sequence=1, algorithm=inplace;
alter table t1 sequence=1, algorithm=copy;
evalp $check_innodb_flags;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t1 sequence=0, algorithm=inplace;
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-36032 Check when doing ALTER TABLE table_name sequence=1 that table can be a sequence
--echo #

## Too many rows
create sequence s;
alter table s sequence=0;
insert into s values (3,1,9223372036854775806,1,1,1000,0,0);
--error ER_SEQUENCE_TABLE_HAS_TOO_MANY_ROWS
alter table s sequence=1;
drop table s;

## Insert a wrong row (min > max)
create sequence s;
alter table s sequence=0;
delete from s;
insert into s values (2,500,200,1,1,1000,0,0);
select * from s;
--error ER_SEQUENCE_INVALID_DATA
alter table s sequence=1;
check table s;
select * from s;
check table s;
drop table s;

## Invalid table structure (already implemented before MDEV-36032)
CREATE TABLE `s` (
  # `next_not_cached_value` bigint(21) NOT NULL,
  `minimum_value` bigint(21) NOT NULL,
  `maximum_value` bigint(21) NOT NULL,
  `start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used',
  `increment` bigint(21) NOT NULL COMMENT 'increment value',
  `cache_size` bigint(21) unsigned NOT NULL,
  `cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed',
  `cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done'
) ENGINE=innodb;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
alter table s sequence=1;
drop table s;

## Altering a sequence table to a wrong structure is detected (already
## implemented before MDEV-36032)
create sequence s;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
alter table s drop column next_not_cached_value;
drop sequence s;

## Create a normal table then alter to sequence
CREATE TABLE `s1` (
`next_not_cached_value` bigint(21) NOT NULL,
`minimum_value` bigint(21) NOT NULL,
`maximum_value` bigint(21) NOT NULL,
`start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used',
`increment` bigint(21) NOT NULL COMMENT 'increment value',
`cache_size` bigint(21) unsigned NOT NULL,
`cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed',
`cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done'
) ENGINE=innodb;

--error ER_SEQUENCE_TABLE_HAS_TOO_FEW_ROWS
alter table s1 sequence=1;
# (for coverage) alter a non sequence table with sequence=0
alter table s1 sequence=0;
insert into s1 values (1,1,9223372036854775806,1,1,1000,0,0);
alter table s1 sequence=1;

alter table s1 sequence=0;
insert into s1 values (2,1,9223372036854775806,1,1,1000,0,0);
--error ER_SEQUENCE_TABLE_HAS_TOO_MANY_ROWS
alter table s1 sequence=1;

# (for coverage) alter a non sequence table with sequence=0
alter table s1 sequence=0;
insert into s1 values (3,1,9223372036854775806,1,1,1000,0,0);
--error ER_SEQUENCE_TABLE_HAS_TOO_MANY_ROWS
alter table s1 sequence=1;

drop table s1;

--echo # End of 10.11 tests

--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 #

[Dauer der Verarbeitung: 0.17 Sekunden, vorverarbeitet 2026-10-08]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1867298