1104 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			1104 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # | |||
|  | # Test of alter table | |||
|  | # | |||
|  | --disable_warnings | |||
|  | drop table if exists t1,t2; | |||
|  | drop database if exists mysqltest; | |||
|  | --enable_warnings | |||
|  | 
 | |||
|  | create table t1 ( | |||
|  | col1 int not null auto_increment primary key, | |||
|  | col2 varchar(30) not null, | |||
|  | col3 varchar (20) not null, | |||
|  | col4 varchar(4) not null, | |||
|  | col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null, | |||
|  | col6 int not null, to_be_deleted int); | |||
|  | insert into t1 values (2,4,3,5,"PENDING",1,7); | |||
|  | alter table t1 | |||
|  | add column col4_5 varchar(20) not null after col4, | |||
|  | add column col7 varchar(30) not null after col5, | |||
|  | add column col8 datetime not null, drop column to_be_deleted, | |||
|  | change column col2 fourth varchar(30) not null after col3, | |||
|  | modify column col6 int not null first; | |||
|  | select * from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | create table t1 (bandID MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY, payoutID SMALLINT UNSIGNED NOT NULL); | |||
|  | insert into t1 (bandID,payoutID) VALUES (1,6),(2,6),(3,4),(4,9),(5,10),(6,1),(7,12),(8,12); | |||
|  | alter table t1 add column new_col int, order by payoutid,bandid; | |||
|  | select * from t1; | |||
|  | alter table t1 order by bandid,payoutid; | |||
|  | select * from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # Check that pack_keys and dynamic length rows are not forced.  | |||
|  | 
 | |||
|  | CREATE TABLE t1 ( | |||
|  | GROUP_ID int(10) unsigned DEFAULT '0' NOT NULL, | |||
|  | LANG_ID smallint(5) unsigned DEFAULT '0' NOT NULL, | |||
|  | NAME varchar(80) DEFAULT '' NOT NULL, | |||
|  | PRIMARY KEY (GROUP_ID,LANG_ID), | |||
|  | KEY NAME (NAME)); | |||
|  | #show table status like "t1"; | |||
|  | ALTER TABLE t1 CHANGE NAME NAME CHAR(80) not null; | |||
|  | --replace_column 8 # | |||
|  | SHOW FULL COLUMNS FROM t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Test of ALTER TABLE ... ORDER BY | |||
|  | # | |||
|  | 
 | |||
|  | create table t1 (n int); | |||
|  | insert into t1 values(9),(3),(12),(10); | |||
|  | alter table t1 order by n; | |||
|  | select * from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | CREATE TABLE t1 ( | |||
|  |   id int(11) unsigned NOT NULL default '0', | |||
|  |   category_id tinyint(4) unsigned NOT NULL default '0', | |||
|  |   type_id tinyint(4) unsigned NOT NULL default '0', | |||
|  |   body text NOT NULL, | |||
|  |   user_id int(11) unsigned NOT NULL default '0', | |||
|  |   status enum('new','old') NOT NULL default 'new', | |||
|  |   PRIMARY KEY (id) | |||
|  | ) ENGINE=MyISAM; | |||
|  | 
 | |||
|  | ALTER TABLE t1 ORDER BY t1.id, t1.status, t1.type_id, t1.user_id, t1.body; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # The following combination found a hang-bug in MyISAM | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 (AnamneseId int(10) unsigned NOT NULL auto_increment,B BLOB,PRIMARY KEY (AnamneseId)) engine=myisam; | |||
|  | insert into t1 values (null,"hello"); | |||
|  | LOCK TABLES t1 WRITE; | |||
|  | ALTER TABLE t1 ADD Column new_col int not null; | |||
|  | UNLOCK TABLES; | |||
|  | OPTIMIZE TABLE t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Drop and add an auto_increment column | |||
|  | # | |||
|  | 
 | |||
|  | create table t1 (i int unsigned not null auto_increment primary key); | |||
|  | insert into t1 values (null),(null),(null),(null); | |||
|  | alter table t1 drop i,add i int unsigned not null auto_increment, drop primary key, add primary key (i); | |||
|  | select * from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug #2628: 'alter table t1 rename mysqltest.t1' silently drops mysqltest.t1  | |||
|  | # if it exists | |||
|  | # | |||
|  | create table t1 (name char(15)); | |||
|  | insert into t1 (name) values ("current"); | |||
|  | create database mysqltest; | |||
|  | create table mysqltest.t1 (name char(15)); | |||
|  | insert into mysqltest.t1 (name) values ("mysqltest"); | |||
|  | select * from t1; | |||
|  | select * from mysqltest.t1; | |||
|  | --error ER_TABLE_EXISTS_ERROR | |||
|  | alter table t1 rename mysqltest.t1; | |||
|  | select * from t1; | |||
|  | select * from mysqltest.t1; | |||
|  | drop table t1; | |||
|  | drop database mysqltest; | |||
|  | 
 | |||
|  | # | |||
|  | # ALTER TABLE ... ENABLE/DISABLE KEYS | |||
|  | 
 | |||
|  | create table t1 (n1 int not null, n2 int, n3 int, n4 float, | |||
|  |                 unique(n1), | |||
|  |                 key (n1, n2, n3, n4), | |||
|  |                 key (n2, n3, n4, n1), | |||
|  |                 key (n3, n4, n1, n2), | |||
|  |                 key (n4, n1, n2, n3) ); | |||
|  | alter table t1 disable keys; | |||
|  | show keys from t1; | |||
|  | #let $1=10000; | |||
|  | let $1=10; | |||
|  | while ($1) | |||
|  | { | |||
|  |  eval insert into t1 values($1,RAND()*1000,RAND()*1000,RAND()); | |||
|  |  dec $1; | |||
|  | } | |||
|  | alter table t1 enable keys; | |||
|  | show keys from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Alter table and rename | |||
|  | # | |||
|  | 
 | |||
|  | create table t1 (i int unsigned not null auto_increment primary key); | |||
|  | alter table t1 rename t2; | |||
|  | alter table t2 rename t1, add c char(10) comment "no comment"; | |||
|  | show columns from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # implicit analyze | |||
|  | 
 | |||
|  | create table t1 (a int, b int); | |||
|  | let $1=100; | |||
|  | while ($1) | |||
|  | { | |||
|  |  eval insert into t1 values(1,$1), (2,$1), (3, $1); | |||
|  |  dec $1; | |||
|  | } | |||
|  | alter table t1 add unique (a,b), add key (b); | |||
|  | show keys from t1; | |||
|  | analyze table t1; | |||
|  | show keys from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Test of ALTER TABLE DELAYED | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 (i int(10), index(i) ); | |||
|  | ALTER TABLE t1 DISABLE KEYS; | |||
|  | INSERT DELAYED INTO t1 VALUES(1),(2),(3); | |||
|  | ALTER TABLE t1 ENABLE KEYS; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Test ALTER TABLE ENABLE/DISABLE keys when things are locked | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 ( | |||
|  |   Host varchar(16) binary NOT NULL default '', | |||
|  |   User varchar(16) binary NOT NULL default '', | |||
|  |   PRIMARY KEY  (Host,User) | |||
|  | ) ENGINE=MyISAM; | |||
|  | 
 | |||
|  | ALTER TABLE t1 DISABLE KEYS; | |||
|  | LOCK TABLES t1 WRITE; | |||
|  | INSERT INTO t1 VALUES ('localhost','root'),('localhost',''),('games','monty'); | |||
|  | SHOW INDEX FROM t1; | |||
|  | ALTER TABLE t1 ENABLE KEYS; | |||
|  | UNLOCK TABLES; | |||
|  | CHECK TABLES t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Test with two keys | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 ( | |||
|  |   Host varchar(16) binary NOT NULL default '', | |||
|  |   User varchar(16) binary NOT NULL default '', | |||
|  |   PRIMARY KEY  (Host,User), | |||
|  |   KEY  (Host) | |||
|  | ) ENGINE=MyISAM; | |||
|  | 
 | |||
|  | ALTER TABLE t1 DISABLE KEYS; | |||
|  | SHOW INDEX FROM t1; | |||
|  | LOCK TABLES t1 WRITE; | |||
|  | INSERT INTO t1 VALUES ('localhost','root'),('localhost',''); | |||
|  | SHOW INDEX FROM t1; | |||
|  | ALTER TABLE t1 ENABLE KEYS; | |||
|  | SHOW INDEX FROM t1; | |||
|  | UNLOCK TABLES; | |||
|  | CHECK TABLES t1; | |||
|  | 
 | |||
|  | # Test RENAME with LOCK TABLES | |||
|  | LOCK TABLES t1 WRITE; | |||
|  | ALTER TABLE t1 RENAME t2; | |||
|  | UNLOCK TABLES; | |||
|  | select * from t2; | |||
|  | DROP TABLE t2; | |||
|  | 
 | |||
|  | # | |||
|  | # Test disable keys with locking | |||
|  | # | |||
|  | CREATE TABLE t1 ( | |||
|  |   Host varchar(16) binary NOT NULL default '', | |||
|  |   User varchar(16) binary NOT NULL default '', | |||
|  |   PRIMARY KEY  (Host,User), | |||
|  |   KEY  (Host) | |||
|  | ) ENGINE=MyISAM; | |||
|  | 
 | |||
|  | LOCK TABLES t1 WRITE; | |||
|  | ALTER TABLE t1 DISABLE KEYS; | |||
|  | SHOW INDEX FROM t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # BUG#4717 - check for valid table names | |||
|  | # | |||
|  | create table t1 (a int); | |||
|  | --error ER_WRONG_TABLE_NAME | |||
|  | alter table t1 rename to ``; | |||
|  | --error ER_WRONG_TABLE_NAME | |||
|  | rename table t1 to ``; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # BUG#6236 - ALTER TABLE MODIFY should set implicit NOT NULL on PK columns | |||
|  | # | |||
|  | drop table if exists t1, t2; | |||
|  | create table t1 ( a varchar(10) not null primary key ) engine=myisam; | |||
|  | create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1); | |||
|  | flush tables; | |||
|  | alter table t1 modify a varchar(10); | |||
|  | show create table t2; | |||
|  | flush tables; | |||
|  | alter table t1 modify a varchar(10) not null; | |||
|  | show create table t2; | |||
|  | drop table if exists t1, t2; | |||
|  | 
 | |||
|  | # The following is also part of bug #6236 (CREATE TABLE didn't properly count | |||
|  | # not null columns for primary keys) | |||
|  | 
 | |||
|  | create table t1 (a int, b int, c int, d int, e int, f int, g int, h int,i int, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; | |||
|  | insert into t1 (a) values(1); | |||
|  | --replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X | |||
|  | show table status like 't1'; | |||
|  | alter table t1 modify a int; | |||
|  | --replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X | |||
|  | show table status like 't1'; | |||
|  | drop table t1; | |||
|  | create table t1 (a int not null, b int not null, c int not null, d int not null, e int not null, f int not null, g int not null, h int not null,i int not null, primary key (a,b,c,d,e,f,g,i,h)) engine=MyISAM; | |||
|  | insert into t1 (a) values(1); | |||
|  | --replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X | |||
|  | show table status like 't1'; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Test that data get converted when character set is changed | |||
|  | # Test that data doesn't get converted when src or dst is BINARY/BLOB | |||
|  | # | |||
|  | set names koi8r; | |||
|  | create table t1 (a char(10) character set koi8r); | |||
|  | insert into t1 values ('<27><><EFBFBD><EFBFBD>'); | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a char(10) character set cp1251; | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a binary(4); | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a char(10) character set cp1251; | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a char(10) character set koi8r; | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a varchar(10) character set cp1251; | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a char(10) character set koi8r; | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a text character set cp1251; | |||
|  | select a,hex(a) from t1; | |||
|  | alter table t1 change a a char(10) character set koi8r; | |||
|  | select a,hex(a) from t1; | |||
|  | delete from t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Test ALTER TABLE .. CHARACTER SET .. | |||
|  | # | |||
|  | show create table t1; | |||
|  | alter table t1 DEFAULT CHARACTER SET latin1; | |||
|  | show create table t1; | |||
|  | alter table t1 CONVERT TO CHARACTER SET latin1; | |||
|  | show create table t1; | |||
|  | alter table t1 DEFAULT CHARACTER SET cp1251; | |||
|  | show create table t1; | |||
|  | 
 | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#2821 | |||
|  | # Test that table CHARACTER SET does not affect blobs | |||
|  | # | |||
|  | create table t1 (myblob longblob,mytext longtext)  | |||
|  | default charset latin1 collate latin1_general_cs; | |||
|  | show create table t1; | |||
|  | alter table t1 character set latin2; | |||
|  | show create table t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug 2361 (Don't drop UNIQUE with DROP PRIMARY KEY) | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 (a int PRIMARY KEY, b INT UNIQUE); | |||
|  | ALTER TABLE t1 DROP PRIMARY KEY; | |||
|  | SHOW CREATE TABLE t1; | |||
|  | --error ER_CANT_DROP_FIELD_OR_KEY | |||
|  | ALTER TABLE t1 DROP PRIMARY KEY; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # BUG#3899 | |||
|  | create table t1 (a int, b int, key(a)); | |||
|  | insert into t1 values (1,1), (2,2); | |||
|  | --error ER_CANT_DROP_FIELD_OR_KEY | |||
|  | alter table t1 drop key no_such_key; | |||
|  | alter table t1 drop key a; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # BUG 12207 alter table ... discard table space on MyISAM table causes ERROR 2013 (HY000) | |||
|  | # | |||
|  | # Some platforms (Mac OS X, Windows) will send the error message using small letters. | |||
|  | CREATE TABLE T12207(a int) ENGINE=MYISAM; | |||
|  | --replace_result t12207 T12207 | |||
|  | --error ER_ILLEGAL_HA | |||
|  | ALTER TABLE T12207 DISCARD TABLESPACE; | |||
|  | DROP TABLE T12207; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug #6479  ALTER TABLE ... changing charset fails for TEXT columns | |||
|  | # | |||
|  | # The column's character set was changed but the actual data was not | |||
|  | # modified. In other words, the values were reinterpreted | |||
|  | # as UTF8 instead of being converted. | |||
|  | create table t1 (a text) character set koi8r; | |||
|  | insert into t1 values (_koi8r'<27><><EFBFBD><EFBFBD>'); | |||
|  | select hex(a) from t1; | |||
|  | alter table t1 convert to character set cp1251; | |||
|  | select hex(a) from t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Test for bug #7884 "Able to add invalid unique index on TIMESTAMP prefix" | |||
|  | # MySQL should not think that packed field with non-zero decimals is | |||
|  | # geometry field and allow to create prefix index which is | |||
|  | # shorter than packed field length. | |||
|  | # | |||
|  | create table t1 ( a timestamp ); | |||
|  | --error ER_WRONG_SUB_KEY | |||
|  | alter table t1 add unique ( a(1) ); | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug #24395: ALTER TABLE DISABLE KEYS doesn't work when modifying the table | |||
|  | # | |||
|  | # This problem happens if the data change is compatible. | |||
|  | # Changing to the same type is compatible for example. | |||
|  | # | |||
|  | --disable_warnings | |||
|  | drop table if exists t1; | |||
|  | --enable_warnings | |||
|  | create table t1 (a int, key(a)); | |||
|  | show indexes from t1; | |||
|  | --echo "this used not to disable the index" | |||
|  | alter table t1 modify a int, disable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | alter table t1 enable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | alter table t1 modify a bigint, disable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | alter table t1 enable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | alter table t1 add b char(10), disable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | alter table t1 add c decimal(10,2), enable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | --echo "this however did" | |||
|  | alter table t1 disable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | desc t1; | |||
|  | 
 | |||
|  | alter table t1 add d decimal(15,5); | |||
|  | --echo "The key should still be disabled" | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | --echo "Now will test with one unique index" | |||
|  | create table t1(a int, b char(10), unique(a)); | |||
|  | show indexes from t1; | |||
|  | alter table t1 disable keys; | |||
|  | show indexes from t1; | |||
|  | alter table t1 enable keys; | |||
|  | 
 | |||
|  | --echo "If no copy on noop change, this won't touch the data file" | |||
|  | --echo "Unique index, no change" | |||
|  | alter table t1 modify a int, disable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | --echo "Change the type implying data copy" | |||
|  | --echo "Unique index, no change" | |||
|  | alter table t1 modify a bigint, disable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | alter table t1 modify a bigint; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | alter table t1 modify a int; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | --echo "Now will test with one unique and one non-unique index" | |||
|  | create table t1(a int, b char(10), unique(a), key(b)); | |||
|  | show indexes from t1; | |||
|  | alter table t1 disable keys; | |||
|  | show indexes from t1; | |||
|  | alter table t1 enable keys; | |||
|  | 
 | |||
|  | 
 | |||
|  | --echo "If no copy on noop change, this won't touch the data file" | |||
|  | --echo "The non-unique index will be disabled" | |||
|  | alter table t1 modify a int, disable keys; | |||
|  | show indexes from t1; | |||
|  | alter table t1 enable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | --echo "Change the type implying data copy" | |||
|  | --echo "The non-unique index will be disabled" | |||
|  | alter table t1 modify a bigint, disable keys; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | --echo "Change again the type, but leave the indexes as_is" | |||
|  | alter table t1 modify a int; | |||
|  | show indexes from t1; | |||
|  | --echo "Try the same. When data is no copied on similar tables, this is noop" | |||
|  | alter table t1 modify a int; | |||
|  | show indexes from t1; | |||
|  | 
 | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#11493 - Alter table rename to default database does not work without | |||
|  | #             db name qualifying | |||
|  | # | |||
|  | create database mysqltest; | |||
|  | create table t1 (c1 int); | |||
|  | # Move table to other database. | |||
|  | alter table t1 rename mysqltest.t1; | |||
|  | # Assure that it has moved. | |||
|  | --error ER_BAD_TABLE_ERROR | |||
|  | drop table t1; | |||
|  | # Move table back. | |||
|  | alter table mysqltest.t1 rename t1; | |||
|  | # Assure that it is back. | |||
|  | drop table t1; | |||
|  | # Now test for correct message if no database is selected. | |||
|  | # Create t1 in 'test'. | |||
|  | create table t1 (c1 int); | |||
|  | # Change to other db. | |||
|  | use mysqltest; | |||
|  | # Drop the current db. This de-selects any db. | |||
|  | drop database mysqltest; | |||
|  | # Now test for correct message. | |||
|  | --error ER_NO_DB_ERROR | |||
|  | alter table test.t1 rename t1; | |||
|  | # Check that explicit qualifying works even with no selected db. | |||
|  | alter table test.t1 rename test.t1; | |||
|  | # Go back to standard 'test' db. | |||
|  | use test; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # BUG#23404 - ROW_FORMAT=FIXED option is lost is an index is added to the | |||
|  | # table | |||
|  | # | |||
|  | CREATE TABLE t1(a INT) ROW_FORMAT=FIXED; | |||
|  | CREATE INDEX i1 ON t1(a); | |||
|  | SHOW CREATE TABLE t1; | |||
|  | DROP INDEX i1 ON t1; | |||
|  | SHOW CREATE TABLE t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#24219 - ALTER TABLE ... RENAME TO ... , DISABLE KEYS leads to crash | |||
|  | # | |||
|  | --disable_warnings | |||
|  | DROP TABLE IF EXISTS bug24219; | |||
|  | DROP TABLE IF EXISTS bug24219_2; | |||
|  | --enable_warnings | |||
|  | 
 | |||
|  | CREATE TABLE bug24219 (a INT, INDEX(a)); | |||
|  | 
 | |||
|  | SHOW INDEX FROM bug24219; | |||
|  | 
 | |||
|  | ALTER TABLE bug24219 RENAME TO bug24219_2, DISABLE KEYS; | |||
|  | 
 | |||
|  | SHOW INDEX FROM bug24219_2; | |||
|  | 
 | |||
|  | DROP TABLE bug24219_2; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#24562 (ALTER TABLE ... ORDER BY ... with complex expression asserts) | |||
|  | # | |||
|  | 
 | |||
|  | --disable_warnings | |||
|  | drop table if exists table_24562; | |||
|  | --enable_warnings | |||
|  | 
 | |||
|  | create table table_24562( | |||
|  |   section int, | |||
|  |   subsection int, | |||
|  |   title varchar(50)); | |||
|  | 
 | |||
|  | insert into table_24562 values | |||
|  | (1, 0, "Introduction"), | |||
|  | (1, 1, "Authors"), | |||
|  | (1, 2, "Acknowledgements"), | |||
|  | (2, 0, "Basics"), | |||
|  | (2, 1, "Syntax"), | |||
|  | (2, 2, "Client"), | |||
|  | (2, 3, "Server"), | |||
|  | (3, 0, "Intermediate"), | |||
|  | (3, 1, "Complex queries"), | |||
|  | (3, 2, "Stored Procedures"), | |||
|  | (3, 3, "Stored Functions"), | |||
|  | (4, 0, "Advanced"), | |||
|  | (4, 1, "Replication"), | |||
|  | (4, 2, "Load balancing"), | |||
|  | (4, 3, "High availability"), | |||
|  | (5, 0, "Conclusion"); | |||
|  | 
 | |||
|  | select * from table_24562; | |||
|  | 
 | |||
|  | alter table table_24562 add column reviewer varchar(20), | |||
|  | order by title; | |||
|  | 
 | |||
|  | select * from table_24562; | |||
|  | 
 | |||
|  | update table_24562 set reviewer="Me" where section=2; | |||
|  | update table_24562 set reviewer="You" where section=3; | |||
|  | 
 | |||
|  | alter table table_24562 | |||
|  | order by section ASC, subsection DESC; | |||
|  | 
 | |||
|  | select * from table_24562; | |||
|  | 
 | |||
|  | alter table table_24562 | |||
|  | order by table_24562.subsection ASC, table_24562.section DESC; | |||
|  | 
 | |||
|  | select * from table_24562; | |||
|  | 
 | |||
|  | --error ER_PARSE_ERROR | |||
|  | alter table table_24562 order by 12; | |||
|  | --error ER_PARSE_ERROR | |||
|  | alter table table_24562 order by (section + 12); | |||
|  | --error ER_PARSE_ERROR | |||
|  | alter table table_24562 order by length(title); | |||
|  | --error ER_PARSE_ERROR | |||
|  | alter table table_24562 order by (select 12 from dual); | |||
|  | 
 | |||
|  | --error ER_BAD_FIELD_ERROR | |||
|  | alter table table_24562 order by no_such_col; | |||
|  | 
 | |||
|  | drop table table_24562; | |||
|  | 
 | |||
|  | # End of 4.1 tests | |||
|  | 
 | |||
|  | # | |||
|  | # Bug #14693 (ALTER SET DEFAULT doesn't work) | |||
|  | # | |||
|  | 
 | |||
|  | create table t1 (mycol int(10) not null); | |||
|  | alter table t1 alter column mycol set default 0; | |||
|  | desc t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#25262 Auto Increment lost when changing Engine type | |||
|  | # | |||
|  | 
 | |||
|  | create table t1(id int(8) primary key auto_increment) engine=heap; | |||
|  | 
 | |||
|  | insert into t1 values (null); | |||
|  | insert into t1 values (null); | |||
|  | 
 | |||
|  | select * from t1; | |||
|  | 
 | |||
|  | # Set auto increment to 50 | |||
|  | alter table t1 auto_increment = 50; | |||
|  | 
 | |||
|  | # Alter to myisam | |||
|  | alter table t1 engine = myisam; | |||
|  | 
 | |||
|  | # This insert should get id 50 | |||
|  | insert into t1 values (null); | |||
|  | select * from t1; | |||
|  | 
 | |||
|  | # Alter to heap again | |||
|  | alter table t1 engine = heap; | |||
|  | insert into t1 values (null); | |||
|  | select * from t1; | |||
|  | 
 | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#27507: Wrong DATETIME value was allowed by ALTER TABLE in the | |||
|  | #            NO_ZERO_DATE mode. | |||
|  | # | |||
|  | set @orig_sql_mode = @@sql_mode; | |||
|  | set sql_mode="no_zero_date"; | |||
|  | create table t1(f1 int); | |||
|  | alter table t1 add column f2 datetime not null, add column f21 date not null; | |||
|  | insert into t1 values(1,'2000-01-01','2000-01-01'); | |||
|  | --error 1292 | |||
|  | alter table t1 add column f3 datetime not null; | |||
|  | --error 1292 | |||
|  | alter table t1 add column f3 date not null; | |||
|  | --error 1292 | |||
|  | alter table t1 add column f4 datetime not null default '2002-02-02', | |||
|  |   add column f41 date not null; | |||
|  | alter table t1 add column f4 datetime not null default '2002-02-02', | |||
|  |   add column f41 date not null default '2002-02-02'; | |||
|  | select * from t1; | |||
|  | drop table t1; | |||
|  | set sql_mode= @orig_sql_mode; | |||
|  | 
 | |||
|  | # | |||
|  | # Some additional tests for new, faster alter table.  Note that most of the | |||
|  | # whole alter table code is being tested all around the test suite already. | |||
|  | # | |||
|  | 
 | |||
|  | create table t1 (v varchar(32)); | |||
|  | insert into t1 values ('def'),('abc'),('hij'),('3r4f'); | |||
|  | select * from t1; | |||
|  | # Fast alter, no copy performed | |||
|  | alter table t1 change v v2 varchar(32); | |||
|  | select * from t1; | |||
|  | # Fast alter, no copy performed | |||
|  | alter table t1 change v2 v varchar(64); | |||
|  | select * from t1; | |||
|  | update t1 set v = 'lmn' where v = 'hij'; | |||
|  | select * from t1; | |||
|  | # Regular alter table | |||
|  | alter table t1 add i int auto_increment not null primary key first; | |||
|  | select * from t1; | |||
|  | update t1 set i=5 where i=3; | |||
|  | select * from t1; | |||
|  | alter table t1 change i i bigint; | |||
|  | select * from t1; | |||
|  | alter table t1 add unique key (i, v); | |||
|  | select * from t1 where i between 2 and 4 and v in ('def','3r4f','lmn'); | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#6073 "ALTER table minor glich": ALTER TABLE complains that an index | |||
|  | # without # prefix is not allowed for TEXT columns, while index | |||
|  | # is defined with prefix. | |||
|  | #  | |||
|  | create table t1 (t varchar(255) default null, key t (t(80))) | |||
|  | engine=myisam default charset=latin1; | |||
|  | alter table t1 change t t text; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug #26794: Adding an index with a prefix on a SPATIAL type breaks ALTER | |||
|  | # TABLE | |||
|  | # | |||
|  | CREATE TABLE t1 (a varchar(500)); | |||
|  | 
 | |||
|  | ALTER TABLE t1 ADD b GEOMETRY NOT NULL, ADD SPATIAL INDEX(b); | |||
|  | SHOW CREATE TABLE t1; | |||
|  | ALTER TABLE t1 ADD KEY(b(50)); | |||
|  | SHOW CREATE TABLE t1; | |||
|  | 
 | |||
|  | ALTER TABLE t1 ADD c POINT; | |||
|  | SHOW CREATE TABLE t1; | |||
|  | 
 | |||
|  | --error ER_WRONG_SUB_KEY | |||
|  | CREATE TABLE t2 (a INT, KEY (a(20))); | |||
|  | 
 | |||
|  | ALTER TABLE t1 ADD d INT; | |||
|  | --error ER_WRONG_SUB_KEY | |||
|  | ALTER TABLE t1 ADD KEY (d(20)); | |||
|  | 
 | |||
|  | # the 5.1 part of the test | |||
|  | --error ER_WRONG_SUB_KEY | |||
|  | ALTER TABLE t1 ADD e GEOMETRY NOT NULL, ADD SPATIAL KEY (e(30)); | |||
|  | 
 | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#18038  MySQL server corrupts binary columns data | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 (s CHAR(8) BINARY); | |||
|  | INSERT INTO t1 VALUES ('test'); | |||
|  | SELECT LENGTH(s) FROM t1; | |||
|  | ALTER TABLE t1 MODIFY s CHAR(10) BINARY; | |||
|  | SELECT LENGTH(s) FROM t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | CREATE TABLE t1 (s BINARY(8)); | |||
|  | INSERT INTO t1 VALUES ('test'); | |||
|  | SELECT LENGTH(s) FROM t1; | |||
|  | SELECT HEX(s) FROM t1; | |||
|  | ALTER TABLE t1 MODIFY s BINARY(10); | |||
|  | SELECT HEX(s) FROM t1; | |||
|  | SELECT LENGTH(s) FROM t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#19386: Multiple alter causes crashed table | |||
|  | # The trailing column would get corrupted data, or server could not even read | |||
|  | # it. | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 (v VARCHAR(3), b INT); | |||
|  | INSERT INTO t1 VALUES ('abc', 5); | |||
|  | SELECT * FROM t1; | |||
|  | ALTER TABLE t1 MODIFY COLUMN v VARCHAR(4); | |||
|  | SELECT * FROM t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#31291 ALTER TABLE CONVERT TO CHARACTER SET does not change some data types | |||
|  | # | |||
|  | create table t1 (a tinytext character set latin1); | |||
|  | alter table t1 convert to character set utf8; | |||
|  | show create table t1; | |||
|  | drop table t1; | |||
|  | create table t1 (a mediumtext character set latin1); | |||
|  | alter table t1 convert to character set utf8; | |||
|  | show create table t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | --echo End of 5.0 tests | |||
|  | 
 | |||
|  | # | |||
|  | # Extended test coverage for ALTER TABLE behaviour under LOCK TABLES | |||
|  | # It should be consistent across all platforms and for all engines | |||
|  | # (Before 5.1 this was not true as behavior was different between  | |||
|  | # Unix/Windows and transactional/non-transactional tables). | |||
|  | # See also innodb_mysql.test | |||
|  | # | |||
|  | --disable_warnings | |||
|  | drop table if exists t1, t2, t3; | |||
|  | --enable_warnings | |||
|  | create table t1 (i int); | |||
|  | create table t3 (j int); | |||
|  | insert into t1 values (); | |||
|  | insert into t3 values (); | |||
|  | # Table which is altered under LOCK TABLES it should stay in list of locked | |||
|  | # tables and be available after alter takes place unless ALTER contains RENAME | |||
|  | # clause. We should see the new definition of table, of course. | |||
|  | lock table t1 write, t3 read; | |||
|  | # Example of so-called 'fast' ALTER TABLE | |||
|  | alter table t1 modify i int default 1; | |||
|  | insert into t1 values (); | |||
|  | select * from t1; | |||
|  | # And now full-blown ALTER TABLE | |||
|  | alter table t1 change i c char(10) default "Two"; | |||
|  | insert into t1 values (); | |||
|  | select * from t1; | |||
|  | # If table is renamed then it should be removed from the list | |||
|  | # of locked tables. 'Fast' ALTER TABLE with RENAME clause: | |||
|  | alter table t1 modify c char(10) default "Three", rename to t2; | |||
|  | --error ER_TABLE_NOT_LOCKED | |||
|  | select * from t1; | |||
|  | --error ER_TABLE_NOT_LOCKED | |||
|  | select * from t2; | |||
|  | select * from t3; | |||
|  | unlock tables; | |||
|  | insert into t2 values (); | |||
|  | select * from t2; | |||
|  | lock table t2 write, t3 read; | |||
|  | # Full ALTER TABLE with RENAME | |||
|  | alter table t2 change c vc varchar(100) default "Four", rename to t1; | |||
|  | --error ER_TABLE_NOT_LOCKED | |||
|  | select * from t1; | |||
|  | --error ER_TABLE_NOT_LOCKED | |||
|  | select * from t2; | |||
|  | select * from t3; | |||
|  | unlock tables; | |||
|  | insert into t1 values (); | |||
|  | select * from t1; | |||
|  | drop tables t1, t3; | |||
|  | 
 | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#18775 - Temporary table from alter table visible to other threads | |||
|  | # | |||
|  | # Check if special characters work and duplicates are detected. | |||
|  | --disable_warnings | |||
|  | DROP TABLE IF EXISTS `t+1`, `t+2`; | |||
|  | --enable_warnings | |||
|  | CREATE TABLE `t+1` (c1 INT); | |||
|  | ALTER TABLE  `t+1` RENAME `t+2`; | |||
|  | CREATE TABLE `t+1` (c1 INT); | |||
|  | --error ER_TABLE_EXISTS_ERROR | |||
|  | ALTER TABLE  `t+1` RENAME `t+2`; | |||
|  | DROP TABLE   `t+1`, `t+2`; | |||
|  | # | |||
|  | # Same for temporary tables though these names do not become file names. | |||
|  | CREATE TEMPORARY TABLE `tt+1` (c1 INT); | |||
|  | ALTER TABLE  `tt+1` RENAME `tt+2`; | |||
|  | CREATE TEMPORARY TABLE `tt+1` (c1 INT); | |||
|  | --error ER_TABLE_EXISTS_ERROR | |||
|  | ALTER TABLE  `tt+1` RENAME `tt+2`; | |||
|  | SHOW CREATE TABLE `tt+1`; | |||
|  | SHOW CREATE TABLE `tt+2`; | |||
|  | DROP TABLE   `tt+1`, `tt+2`; | |||
|  | # | |||
|  | # Check if special characters as in tmp_file_prefix work. | |||
|  | CREATE TABLE `#sql1` (c1 INT); | |||
|  | CREATE TABLE `@0023sql2` (c1 INT); | |||
|  | SHOW TABLES; | |||
|  | RENAME TABLE `#sql1`     TO `@0023sql1`; | |||
|  | RENAME TABLE `@0023sql2` TO `#sql2`; | |||
|  | SHOW TABLES; | |||
|  | ALTER TABLE `@0023sql1`  RENAME `#sql-1`; | |||
|  | ALTER TABLE `#sql2`      RENAME `@0023sql-2`; | |||
|  | SHOW TABLES; | |||
|  | INSERT INTO `#sql-1`     VALUES (1); | |||
|  | INSERT INTO `@0023sql-2` VALUES (2); | |||
|  | DROP TABLE `#sql-1`, `@0023sql-2`; | |||
|  | # | |||
|  | # Same for temporary tables though these names do not become file names. | |||
|  | CREATE TEMPORARY TABLE `#sql1` (c1 INT); | |||
|  | CREATE TEMPORARY TABLE `@0023sql2` (c1 INT); | |||
|  | SHOW TABLES; | |||
|  | ALTER TABLE `#sql1`      RENAME `@0023sql1`; | |||
|  | ALTER TABLE `@0023sql2`  RENAME `#sql2`; | |||
|  | SHOW TABLES; | |||
|  | INSERT INTO `#sql2`      VALUES (1); | |||
|  | INSERT INTO `@0023sql1`  VALUES (2); | |||
|  | SHOW CREATE TABLE `#sql2`; | |||
|  | SHOW CREATE TABLE `@0023sql1`; | |||
|  | DROP TABLE `#sql2`, `@0023sql1`; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug #22369: Alter table rename combined with other alterations causes lost tables | |||
|  | # | |||
|  | # This problem happens if the data change is compatible. | |||
|  | # Changing to the same type is compatible for example. | |||
|  | # | |||
|  | --disable_warnings | |||
|  | DROP TABLE IF EXISTS t1; | |||
|  | DROP TABLE IF EXISTS t2; | |||
|  | --enable_warnings | |||
|  | CREATE TABLE t1 ( | |||
|  |   int_field INTEGER UNSIGNED NOT NULL, | |||
|  |   char_field CHAR(10), | |||
|  |   INDEX(`int_field`) | |||
|  | ); | |||
|  | 
 | |||
|  | DESCRIBE t1; | |||
|  | 
 | |||
|  | SHOW INDEXES FROM t1; | |||
|  | 
 | |||
|  | INSERT INTO t1 VALUES (1, "edno"), (1, "edno"), (2, "dve"), (3, "tri"), (5, "pet");  | |||
|  | --echo "Non-copy data change - new frm, but old data and index files" | |||
|  | ALTER TABLE t1 | |||
|  |   CHANGE int_field unsigned_int_field INTEGER UNSIGNED NOT NULL, | |||
|  |   RENAME t2; | |||
|  | 
 | |||
|  | --error ER_NO_SUCH_TABLE | |||
|  | SELECT * FROM t1 ORDER BY int_field; | |||
|  | SELECT * FROM t2 ORDER BY unsigned_int_field; | |||
|  | DESCRIBE t2; | |||
|  | DESCRIBE t2; | |||
|  | ALTER TABLE t2 MODIFY unsigned_int_field BIGINT UNSIGNED NOT NULL; | |||
|  | DESCRIBE t2; | |||
|  | 
 | |||
|  | DROP TABLE t2; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#28427: Columns were renamed instead of moving by ALTER TABLE. | |||
|  | # | |||
|  | CREATE TABLE t1 (f1 INT, f2 INT, f3 INT); | |||
|  | INSERT INTO t1 VALUES (1, 2, NULL); | |||
|  | SELECT * FROM t1; | |||
|  | ALTER TABLE t1 MODIFY COLUMN f3 INT AFTER f1; | |||
|  | SELECT * FROM t1; | |||
|  | ALTER TABLE t1 MODIFY COLUMN f3 INT AFTER f2; | |||
|  | SELECT * FROM t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # BUG#29957 - alter_table.test fails | |||
|  | # | |||
|  | create table t1 (c char(10) default "Two"); | |||
|  | lock table t1 write; | |||
|  | insert into t1 values (); | |||
|  | alter table t1 modify c char(10) default "Three"; | |||
|  | unlock tables; | |||
|  | select * from t1; | |||
|  | check table t1; | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#33873: Fast ALTER TABLE doesn't work with multibyte character sets | |||
|  | # | |||
|  | 
 | |||
|  | --disable_warnings | |||
|  | DROP TABLE IF EXISTS t1; | |||
|  | --enable_warnings | |||
|  | CREATE TABLE t1 (id int, c int) character set latin1; | |||
|  | INSERT INTO t1 VALUES (1,1); | |||
|  | --enable_info | |||
|  | ALTER TABLE t1 CHANGE c d int; | |||
|  | ALTER TABLE t1 CHANGE d c int; | |||
|  | ALTER TABLE t1 MODIFY c VARCHAR(10); | |||
|  | ALTER TABLE t1 CHANGE c d varchar(10); | |||
|  | ALTER TABLE t1 CHANGE d c varchar(10); | |||
|  | --disable_info | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | --disable_warnings | |||
|  | DROP TABLE IF EXISTS t1; | |||
|  | --enable_warnings | |||
|  | CREATE TABLE t1 (id int, c int) character set utf8; | |||
|  | INSERT INTO t1 VALUES (1,1); | |||
|  | --enable_info | |||
|  | ALTER TABLE t1 CHANGE c d int; | |||
|  | ALTER TABLE t1 CHANGE d c int; | |||
|  | ALTER TABLE t1 MODIFY c VARCHAR(10); | |||
|  | ALTER TABLE t1 CHANGE c d varchar(10); | |||
|  | ALTER TABLE t1 CHANGE d c varchar(10); | |||
|  | --disable_info | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#39372 "Smart" ALTER TABLE not so smart after all. | |||
|  | # | |||
|  | create table t1(f1 int not null, f2 int not null, key  (f1), key (f2)); | |||
|  | let $count= 50; | |||
|  | --disable_query_log | |||
|  | while ($count) | |||
|  | { | |||
|  |   EVAL insert into t1 values (1,1),(1,1),(1,1),(1,1),(1,1); | |||
|  |   EVAL insert into t1 values (2,2),(2,2),(2,2),(2,2),(2,2); | |||
|  |   dec $count ; | |||
|  | } | |||
|  | --enable_query_log | |||
|  | 
 | |||
|  | select index_length into @unpaked_keys_size from | |||
|  | information_schema.tables where table_name='t1'; | |||
|  | alter table t1 pack_keys=1; | |||
|  | select index_length into @paked_keys_size from | |||
|  | information_schema.tables where table_name='t1'; | |||
|  | select (@unpaked_keys_size > @paked_keys_size); | |||
|  | 
 | |||
|  | select max_data_length into @orig_max_data_length from | |||
|  | information_schema.tables where table_name='t1'; | |||
|  | alter table t1 max_rows=100; | |||
|  | select max_data_length into @changed_max_data_length from | |||
|  | information_schema.tables where table_name='t1'; | |||
|  | select (@orig_max_data_length > @changed_max_data_length); | |||
|  | 
 | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug #23113: Different behavior on altering ENUM fields between 5.0 and 5.1 | |||
|  | # | |||
|  | CREATE TABLE t1(a INT AUTO_INCREMENT PRIMARY KEY,  | |||
|  |   b ENUM('a', 'b', 'c') NOT NULL); | |||
|  | INSERT INTO t1 (b) VALUES ('a'), ('c'), ('b'), ('b'), ('a'); | |||
|  | ALTER TABLE t1 MODIFY b ENUM('a', 'z', 'b', 'c') NOT NULL; | |||
|  | SELECT * FROM t1; | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | --echo # | |||
|  | --echo # Bug#45567: Fast ALTER TABLE broken for enum and set | |||
|  | --echo # | |||
|  | 
 | |||
|  | --disable_warnings | |||
|  | DROP TABLE IF EXISTS t1; | |||
|  | --enable_warnings | |||
|  | 
 | |||
|  | CREATE TABLE t1 (a ENUM('a1','a2')); | |||
|  | INSERT INTO t1 VALUES ('a1'),('a2'); | |||
|  | --enable_info | |||
|  | --echo # No copy: No modification | |||
|  | ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2'); | |||
|  | --echo # No copy: Add new enumeration to the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a3'); | |||
|  | --echo # Copy: Modify and add new to the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','xx','a5'); | |||
|  | --echo # Copy: Remove from the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','xx'); | |||
|  | --echo # Copy: Add new enumeration | |||
|  | ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a0','xx'); | |||
|  | --echo # No copy: Add new enumerations to the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a0','xx','a5','a6'); | |||
|  | --disable_info | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | CREATE TABLE t1 (a SET('a1','a2')); | |||
|  | INSERT INTO t1 VALUES ('a1'),('a2'); | |||
|  | --enable_info | |||
|  | --echo # No copy: No modification | |||
|  | ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2'); | |||
|  | --echo # No copy: Add new to the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a3'); | |||
|  | --echo # Copy: Modify and add new to the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','xx','a5'); | |||
|  | --echo # Copy: Remove from the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','xx'); | |||
|  | --echo # Copy: Add new member | |||
|  | ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx'); | |||
|  | --echo # No copy: Add new to the end | |||
|  | ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx','a5','a6'); | |||
|  | --echo # Copy: Numerical incrase (pack lenght) | |||
|  | ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx','a5','a6','a7','a8','a9','a10'); | |||
|  | --disable_info | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | # | |||
|  | # Bug#43508: Renaming timestamp or date column triggers table copy | |||
|  | # | |||
|  | 
 | |||
|  | CREATE TABLE t1 (f1 TIMESTAMP NULL DEFAULT NULL, | |||
|  |                  f2 INT(11) DEFAULT NULL) ENGINE=MYISAM DEFAULT CHARSET=utf8; | |||
|  | 
 | |||
|  | INSERT INTO t1 VALUES (NULL, NULL), ("2009-10-09 11:46:19", 2); | |||
|  | 
 | |||
|  | --echo this should affect no rows as there is no real change | |||
|  | --enable_info | |||
|  | ALTER TABLE t1 CHANGE COLUMN f1 f1_no_real_change TIMESTAMP NULL DEFAULT NULL; | |||
|  | --disable_info | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | 
 | |||
|  | --echo # | |||
|  | --echo # Bug #31145: ALTER TABLE DROP COLUMN, ADD COLUMN crashes (linux)  | |||
|  | --echo #   or freezes (win) the server | |||
|  | --echo # | |||
|  | 
 | |||
|  | CREATE TABLE t1 (a TEXT, id INT, b INT); | |||
|  | ALTER TABLE t1 DROP COLUMN a, ADD COLUMN c TEXT FIRST; | |||
|  | 
 | |||
|  | DROP TABLE t1; | |||
|  | 
 | |||
|  | 
 | |||
|  | --echo # | |||
|  | --echo # Test for bug #12652385 - "61493: REORDERING COLUMNS TO POSITION | |||
|  | --echo #                           FIRST CAN CAUSE DATA TO BE CORRUPTED". | |||
|  | --echo # | |||
|  | --disable_warnings | |||
|  | drop table if exists t1; | |||
|  | --enable_warnings | |||
|  | --echo # Use MyISAM engine as the fact that InnoDB doesn't support | |||
|  | --echo # in-place ALTER TABLE in cases when columns are being renamed | |||
|  | --echo # hides some bugs. | |||
|  | create table t1 (i int, j int) engine=myisam; | |||
|  | insert into t1 value (1, 2); | |||
|  | --echo # First, test for original problem described in the bug report. | |||
|  | select * from t1; | |||
|  | --echo # Change of column order by the below ALTER TABLE statement should | |||
|  | --echo # affect both column names and column contents. | |||
|  | alter table t1 modify column j int first; | |||
|  | select * from t1; | |||
|  | --echo # Now test for similar problem with the same root. | |||
|  | --echo # The below ALTER TABLE should change not only the name but | |||
|  | --echo # also the value for the last column of the table. | |||
|  | alter table t1 drop column i, add column k int default 0; | |||
|  | select * from t1; | |||
|  | --echo # Clean-up. | |||
|  | drop table t1; | |||
|  | 
 | |||
|  | 
 | |||
|  | --echo End of 5.1 tests |