mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 2a57396e59
			
		
	
	
	2a57396e59
	
	
	
		
			
			This is a new version of the patch instead of the reverted: MDEV-28727 ALTER TABLE ALGORITHM=NOCOPY does not work after upgrade Ignore the difference in key packing flags HA_BINARY_PACK_KEY and HA_PACK_KEY during ALTER to allow ALGORITHM=INSTANT and ALGORITHM=NOCOPY in more cases. If for some reasons (e.g. due to a bug fix such as MDEV-20704) these cumulative (over all segments) flags in KEY::flags are different for the old and new table inside compare_keys_but_name(), the difference in HA_BINARY_PACK_KEY and HA_PACK_KEY in KEY::flags is not really important: MyISAM and Aria can handle such cases well: per-segment flags are stored in MYI and MAI files anyway and they are read during ha_myisam::open() ha_maria::open() time. So indexes get opened with correct per-segment flags that were calculated during the table CREATE time, no matter what the old (CREATE time) and new (ALTER TIME) per-index compression flags are, and no matter if they are equal or not. All other engine ignore key compression flags, so this change is safe for other engines as well.
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # Start of 10.4 tests
 | |
| #
 | |
| #
 | |
| # MDEV-29481 mariadb-upgrade prints confusing statement
 | |
| #
 | |
| SET @debug_key_flags=NULL;
 | |
| SET default_storage_engine=ARIA;
 | |
| CREATE PROCEDURE debug_show_key_flags()
 | |
| BEGIN
 | |
| IF @debug_key_flags IS TRUE
 | |
| THEN
 | |
| FLUSH TABLES;
 | |
| -- Wrap SET into EXECUTE IMMEDIATE to avoid
 | |
| -- parse time "Unknown system variable" errors in release builds.
 | |
| EXECUTE IMMEDIATE "SET debug_dbug='+d,key'";
 | |
| SELECT * FROM t1 LIMIT 0;
 | |
| EXECUTE IMMEDIATE "SET debug_dbug=''";
 | |
| END IF;
 | |
| END;
 | |
| $$
 | |
| SHOW CREATE TABLE t1;
 | |
| Table	Create Table
 | |
| t1	CREATE TABLE `t1` (
 | |
|   `d` double(18,7) DEFAULT NULL,
 | |
|   KEY `d` (`d`)
 | |
| ) ENGINE=Aria DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci PAGE_CHECKSUM=1
 | |
| CHECK TABLE t1 FOR UPGRADE;
 | |
| Table	Op	Msg_type	Msg_text
 | |
| test.t1	check	status	OK
 | |
| DROP TABLE t1;
 | |
| CALL debug_show_key_flags();
 | |
| ALTER TABLE t1 MODIFY d DOUBLE DEFAULT 10, ALGORITHM=INSTANT;
 | |
| CALL debug_show_key_flags();
 | |
| DROP TABLE t1;
 | |
| CALL debug_show_key_flags();
 | |
| ALTER TABLE t1 MODIFY d DOUBLE DEFAULT 10, ALGORITHM=NOCOPY;
 | |
| CALL debug_show_key_flags();
 | |
| DROP TABLE t1;
 | |
| CALL debug_show_key_flags();
 | |
| REPAIR TABLE t1;
 | |
| Table	Op	Msg_type	Msg_text
 | |
| test.t1	repair	status	OK
 | |
| CALL debug_show_key_flags();
 | |
| DROP TABLE t1;
 | |
| CALL debug_show_key_flags();
 | |
| ALTER TABLE t1 FORCE;
 | |
| CALL debug_show_key_flags();
 | |
| DROP TABLE t1;
 | |
| DROP PROCEDURE debug_show_key_flags;
 | |
| #
 | |
| # End of 10.4 tests
 | |
| #
 |