mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	It was syntactically correct to define spatial keys over parts of columns (e.g. ALTER TABLE t1 ADD x GEOMETRY NOT NULL, ADD SPATIAL KEY (x(32))). This may lead to undefined results and/or interpretation. Fixed by not allowing partial column specification in a SPATIAL index definition. mysql-test/r/alter_table.result: Bug #26794: 5.1 part test case mysql-test/r/gis-rtree.result: Bug #26794: 5.1 part updated the tests to the new syntax mysql-test/t/alter_table.test: Bug #26794: 5.1 part test case mysql-test/t/gis-rtree.test: Bug #26794: 5.1 part updated the tests to the new syntax sql/sql_table.cc: Bug #26794: 5.1 part Disable defining SPATIAL KEYS with sub-key parts
		
			
				
	
	
		
			792 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			792 lines
		
	
	
		
			20 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;
 | ||
| 
 | ||
| #
 | ||
| # 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;
 | ||
| 
 | ||
| # End of 5.0 tests
 | ||
| 
 | ||
| #
 | ||
| # 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;
 |