mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	 ec9908b257
			
		
	
	
	ec9908b257
	
	
	
		
			
			- ALTER_ALGORITHM should be substituted when there is no mention of algorithm in alter statement. - Introduced algorithm(thd) in Alter_info. It returns the user requested algorithm. If user doesn't specify algorithm explicitly then it returns alter_algorithm variable. - changed algorithm() to get_algorithm(thd) to return algorithm name for displaying the error. - set_requested_algorithm(algo_value) to avoid direct assignment on requested_algorithm variable. - Avoid direct access of requested_algorithm to encapsulate requested_algorithm variable
		
			
				
	
	
		
			145 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| --source include/have_innodb.inc
 | |
| let $algorithm = `SELECT @@ALTER_ALGORITHM`;
 | |
| let $error_code = 0;
 | |
| 
 | |
| if ($algorithm == "NOCOPY") {
 | |
|  let $error_code = ER_ALTER_OPERATION_NOT_SUPPORTED, ER_ALTER_OPERATION_NOT_SUPPORTED_REASON;
 | |
| }
 | |
| 
 | |
| if ($algorithm == "INSTANT") {
 | |
|  let $error_code = ER_ALTER_OPERATION_NOT_SUPPORTED, ER_ALTER_OPERATION_NOT_SUPPORTED_REASON;
 | |
| }
 | |
| 
 | |
| CREATE TABLE t1(f1 INT NOT NULL,
 | |
| 		f2 INT NOT NULL,
 | |
| 		f3 INT NULL,
 | |
| 		f4 INT as (f2) STORED,
 | |
| 		f5 INT as (f3) STORED,
 | |
| 		PRIMARY KEY(f1))ROW_FORMAT=COMPRESSED, ENGINE=INNODB;
 | |
| INSERT INTO t1(f1, f2, f3) VALUES(1, 1, 1);
 | |
| 
 | |
| SELECT @@alter_algorithm;
 | |
| 
 | |
| --enable_info
 | |
| --echo # All the following cases needs table rebuild
 | |
| 
 | |
| --echo # Add and Drop primary key
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1);
 | |
| 
 | |
| --echo # Make existing column NULLABLE
 | |
| --error $error_code
 | |
| ALTER TABLE t1 MODIFY f2 INT;
 | |
| 
 | |
| --echo # Drop Stored Column
 | |
| --error $error_code
 | |
| ALTER TABLE t1 DROP COLUMN f5;
 | |
| 
 | |
| --echo # Add base non-generated column as a last column in the compressed table
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL;
 | |
| 
 | |
| --echo # Add base non-generated column but not in the last position
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3;
 | |
| 
 | |
| --echo # Force the table to rebuild
 | |
| --error $error_code
 | |
| ALTER TABLE t1 FORCE;
 | |
| 
 | |
| --echo # Row format changes
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
 | |
| 
 | |
| --echo # Engine table
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ENGINE=INNODB;
 | |
| 
 | |
| # Irrespective of alter_algorithm value, the following command
 | |
| # should succeed because of explicitly mentioning ALGORTHM=DEFAULT
 | |
| ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
 | |
| 
 | |
| DROP TABLE t1;
 | |
| --disable_info
 | |
| 
 | |
| if ($algorithm == "NOCOPY") {
 | |
|  let $error_code = 0;
 | |
| }
 | |
| 
 | |
| if ($algorithm == "INSTANT") {
 | |
|  let $error_code = ER_ALTER_OPERATION_NOT_SUPPORTED_REASON;
 | |
| }
 | |
| 
 | |
| CREATE TABLE t1(f1 INT PRIMARY KEY, f2 INT NOT NULL,
 | |
| 		f3 INT AS (f2 * f2) VIRTUAL,
 | |
| 		f4 INT NOT NULL UNIQUE,
 | |
| 		f5 INT NOT NULL,
 | |
| 		INDEX idx(f2))ENGINE=INNODB;
 | |
| 
 | |
| CREATE TABLE t2(f1 INT NOT NULL, f2 INT NOT NULL,
 | |
| 		INDEX(f1),
 | |
| 		FOREIGN KEY fidx(f1) REFERENCES t1(f1))ENGINE=INNODB;
 | |
| 
 | |
| INSERT INTO t1(f1, f2, f4, f5) VALUES(1, 2, 3, 4);
 | |
| 
 | |
| --enable_info
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1;
 | |
| 
 | |
| --error $error_code
 | |
| ALTER TABLE t1 DROP INDEX idx, page_compression_level=5;
 | |
| 
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ADD UNIQUE INDEX u1(f2);
 | |
| 
 | |
| --error $error_code
 | |
| ALTER TABLE t1 DROP INDEX f4, page_compression_level=9;
 | |
| 
 | |
| SET foreign_key_checks = 0;
 | |
| --error $error_code
 | |
| ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1);
 | |
| 
 | |
| DROP TABLE t2, t1;
 | |
| --disable_info
 | |
| 
 | |
| CREATE TABLE t1(f1 INT NOT NULL,
 | |
|                 f2 INT NOT NULL,
 | |
|                 f3 INT AS (f2 * f2) VIRTUAL,
 | |
| 		INDEX idx (f2))engine=innodb;
 | |
| 
 | |
| CREATE TABLE t2(f1 INT NOT NULL, f2 INT NOT NULL,
 | |
| 		f3 VARCHAR(10),
 | |
| 		INDEX(f1))ENGINE=INNODB;
 | |
| 
 | |
| INSERT INTO t1(f1, f2) VALUES(1, 1);
 | |
| 
 | |
| --enable_info
 | |
| --echo # Add column at the end of the table
 | |
| ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL';
 | |
| 
 | |
| --echo # Change virtual column expression
 | |
| ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL;
 | |
| 
 | |
| --echo # Add virtual column
 | |
| ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL;
 | |
| 
 | |
| --echo # Rename Column
 | |
| ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL;
 | |
| 
 | |
| --echo # Rename table
 | |
| ALTER TABLE t1 RENAME t3;
 | |
| 
 | |
| --echo # Drop Virtual Column
 | |
| ALTER TABLE t3 DROP COLUMN vcol;
 | |
| 
 | |
| --echo # Column length varies
 | |
| ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20);
 | |
| 
 | |
| SET foreign_key_checks = 0;
 | |
| ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1);
 | |
| 
 | |
| SET foreign_key_checks = 1;
 | |
| ALTER TABLE t3 DROP FOREIGN KEY fidx;
 | |
| 
 | |
| DROP TABLE t3, t2;
 | |
| --disable_info
 |