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
							 |