1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

MDEV-33655 Remove alter_algorithm

Remove alter_algorithm but keep the variable as no-op (with a warning).

The reasons for removing alter_algorithm are:
- alter_algorithm was introduced as a replacement for the
  old_alter_table that was used to force the usage of the original
  alter table algorithm (copy) in the cases where the new alter
  algorithm did not work. The new option was added as a way to force
  the usage of a specific algorithm when it should instead have made
  it possible to disable algorithms that would not work for some
  reason.
- alter_algorithm introduced some cases where ALTER TABLE would not
  work without specifying the ALGORITHM=XXX option together with
  ALTER TABLE.
- Having different values of alter_algorithm on master and slave could
  cause slave to stop unexpectedly.
- ALTER TABLE FORCE, as used by mariadb-upgrade, would not always work
  if alter_algorithm was set for the server.
- As part of the MDEV-33449 "improving repair of tables" it become
  clear that alter- algorithm made it harder to provide a better and
  more consistent ALTER TABLE FORCE and REPAIR TABLE and it would be
  better to remove it.
This commit is contained in:
Monty
2024-03-12 13:54:30 +02:00
committed by Sergei Golubchik
parent 6254fcf84a
commit 2464ee758a
58 changed files with 1171 additions and 2205 deletions

View File

@ -1654,13 +1654,11 @@ ALTER TABLE m1 ENABLE KEYS, ALGORITHM= INPLACE;
affected rows: 0
ALTER TABLE t1 DROP INDEX i1, DROP INDEX i2, DROP INDEX i3, DROP INDEX i4;
#
# 2: Test ALGORITHM + alter_algorithm
# 2: Test ALGORITHM keywords
#
SET SESSION alter_algorithm= 1;
affected rows: 0
ALTER TABLE t1 ADD INDEX i1(b);
affected rows: 2
info: Records: 2 Duplicates: 0 Warnings: 0
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ADD INDEX i2(b), ALGORITHM= DEFAULT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
@ -1676,8 +1674,6 @@ affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Note 1831 Duplicate index `i4`. This is deprecated and will be disallowed in a future release
SET SESSION alter_algorithm= 0;
affected rows: 0
ALTER TABLE t1 DROP INDEX i1, DROP INDEX i2, DROP INDEX i3, DROP INDEX i4;
#
# 3: Test unsupported in-place operation
@ -3123,3 +3119,13 @@ DROP TABLE t;
#
# End of 10.7 tests
#
#
# MDEV-33655 Remove alter_algorithm
#
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
CREATE TABLE t2 (a INT) ENGINE=MERGE, UNION(t1);
ALTER TABLE t2 COMMENT 'x', LOCK=SHARED;
DROP TABLE t2,t1;
#
# End of 11.5 tests
#

View File

@ -1462,16 +1462,14 @@ ALTER TABLE m1 ENABLE KEYS, ALGORITHM= INPLACE;
ALTER TABLE t1 DROP INDEX i1, DROP INDEX i2, DROP INDEX i3, DROP INDEX i4;
--echo #
--echo # 2: Test ALGORITHM + alter_algorithm
--echo # 2: Test ALGORITHM keywords
--echo #
--enable_info
SET SESSION alter_algorithm= 1;
ALTER TABLE t1 ADD INDEX i1(b);
ALTER TABLE t1 ADD INDEX i2(b), ALGORITHM= DEFAULT;
ALTER TABLE t1 ADD INDEX i3(b), ALGORITHM= COPY;
ALTER TABLE t1 ADD INDEX i4(b), ALGORITHM= INPLACE;
SET SESSION alter_algorithm= 0;
--disable_info
ALTER TABLE t1 DROP INDEX i1, DROP INDEX i2, DROP INDEX i3, DROP INDEX i4;
@ -2428,3 +2426,16 @@ DROP TABLE t;
--echo #
--echo # End of 10.7 tests
--echo #
--echo #
--echo # MDEV-33655 Remove alter_algorithm
--echo #
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
CREATE TABLE t2 (a INT) ENGINE=MERGE, UNION(t1);
ALTER TABLE t2 COMMENT 'x', LOCK=SHARED;
DROP TABLE t2,t1;
--echo #
--echo # End of 11.5 tests
--echo #

View File

@ -1,7 +1,19 @@
create table t1 (a int, b int, key a1(a)) engine=innodb;
insert into t1 values (1,1),(2,2),(3,3);
set alter_algorithm='instant';
alter table t1 alter index a1 ignored;
alter table t1 alter index a1 not ignored;
set alter_algorithm=default;
alter table t1 alter index a1 ignored, algorithm=instant;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
KEY `a1` (`a`) IGNORED
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
alter table t1 alter index a1 not ignored, algorithm=instant;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
KEY `a1` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
drop table t1;

View File

@ -6,11 +6,9 @@
create table t1 (a int, b int, key a1(a)) engine=innodb;
insert into t1 values (1,1),(2,2),(3,3);
set alter_algorithm='instant';
alter table t1 alter index a1 ignored;
alter table t1 alter index a1 ignored, algorithm=instant;
show create table t1;
alter table t1 alter index a1 not ignored, algorithm=instant;
show create table t1;
alter table t1 alter index a1 not ignored;
set alter_algorithm=default;
drop table t1;

View File

@ -449,63 +449,14 @@ info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ENGINE=INNODB;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
#ALTER TABLE FORCE, ALTER TABLE ENGINE and OPTIMIZE TABLE uses
#table copy when the alter_algorithm enabled.
SET SESSION alter_algorithm= TRUE;
affected rows: 0
ALTER TABLE t1 FORCE;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ENGINE= INNODB;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded';
affected rows: 0
#OPTIMIZE TABLE operation using table copy.
OPTIMIZE TABLE t1;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
affected rows: 0
INSERT INTO t1 VALUES(10, 20);
affected rows: 1
connection default;
Table Op Msg_type Msg_text
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
test.t1 optimize status OK
affected rows: 2
SET DEBUG_SYNC= 'RESET';
affected rows: 0
SET SESSION alter_algorithm= FALSE;
affected rows: 0
#ALTER TABLE FORCE and ALTER TABLE ENGINE uses table copy
#when ALGORITHM COPY is used.
# ALTER TABLE FORCE and ALTER TABLE ENGINE uses table copy
# when ALGORITHM COPY is used.
ALTER TABLE t1 FORCE, ALGORITHM= COPY;
affected rows: 2
info: Records: 2 Duplicates: 0 Warnings: 0
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ENGINE= INNODB, ALGORITHM= COPY;
affected rows: 2
info: Records: 2 Duplicates: 0 Warnings: 0
DROP TABLE t1;
#OPTIMIZE TABLE on a table with FULLTEXT index uses
#ALTER TABLE FORCE using COPY algorithm here. This
#test case ensures the COPY table debug sync point is hit.
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded';
#Setup a table with FULLTEXT index.
connection default;
CREATE TABLE t1(fld1 CHAR(10), FULLTEXT(fld1), FULLTEXT(fld1)) ENGINE= INNODB;
Warnings:
Note 1831 Duplicate index `fld1_2`. This is deprecated and will be disallowed in a future release
INSERT INTO t1 VALUES("String1");
#OPTIMIZE TABLE operation.
OPTIMIZE TABLE t1;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
INSERT INTO t1 VALUES("String2");
connection default;
Table Op Msg_type Msg_text
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
test.t1 optimize status OK
SET DEBUG_SYNC= 'RESET';
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
DROP TABLE t1;
#Test which demonstrates that ALTER TABLE, OPTIMIZE PARTITION
#takes OPTIMIZE TABLE code path, hence does an online rebuild

View File

@ -611,27 +611,8 @@ INSERT INTO t1 VALUES(10, 20);
ALTER TABLE t1 FORCE;
ALTER TABLE t1 ENGINE=INNODB;
--echo #ALTER TABLE FORCE, ALTER TABLE ENGINE and OPTIMIZE TABLE uses
--echo #table copy when the alter_algorithm enabled.
SET SESSION alter_algorithm= TRUE;
ALTER TABLE t1 FORCE;
ALTER TABLE t1 ENGINE= INNODB;
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded';
--echo #OPTIMIZE TABLE operation using table copy.
--send OPTIMIZE TABLE t1
--connection con1
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
INSERT INTO t1 VALUES(10, 20);
--connection default
--reap
SET DEBUG_SYNC= 'RESET';
SET SESSION alter_algorithm= FALSE;
--echo #ALTER TABLE FORCE and ALTER TABLE ENGINE uses table copy
--echo #when ALGORITHM COPY is used.
--echo # ALTER TABLE FORCE and ALTER TABLE ENGINE uses table copy
--echo # when ALGORITHM COPY is used.
ALTER TABLE t1 FORCE, ALGORITHM= COPY;
ALTER TABLE t1 ENGINE= INNODB, ALGORITHM= COPY;
--disable_info
@ -639,29 +620,6 @@ ALTER TABLE t1 ENGINE= INNODB, ALGORITHM= COPY;
#cleanup
DROP TABLE t1;
--echo #OPTIMIZE TABLE on a table with FULLTEXT index uses
--echo #ALTER TABLE FORCE using COPY algorithm here. This
--echo #test case ensures the COPY table debug sync point is hit.
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded';
--echo #Setup a table with FULLTEXT index.
--connection default
CREATE TABLE t1(fld1 CHAR(10), FULLTEXT(fld1), FULLTEXT(fld1)) ENGINE= INNODB;
INSERT INTO t1 VALUES("String1");
--echo #OPTIMIZE TABLE operation.
--send OPTIMIZE TABLE t1
--connection con1
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
INSERT INTO t1 VALUES("String2");
--connection default
--reap
SET DEBUG_SYNC= 'RESET';
DROP TABLE t1;
--echo #Test which demonstrates that ALTER TABLE, OPTIMIZE PARTITION
--echo #takes OPTIMIZE TABLE code path, hence does an online rebuild
--echo #of the table with the patch.

View File

@ -1,18 +0,0 @@
set global alter_algorithm=INPLACE;
RENAME TABLE mysql.time_zone TO mysql.time_zone_BACKUP;
RENAME TABLE mysql.time_zone_name TO mysql.time_zone_name_BACKUP;
RENAME TABLE mysql.time_zone_transition TO mysql.time_zone_transition_BACKUP;
RENAME TABLE mysql.time_zone_transition_type TO mysql.time_zone_transition_type_BACKUP;
CREATE TABLE mysql.time_zone LIKE mysql.time_zone_BACKUP;
CREATE TABLE mysql.time_zone_name LIKE mysql.time_zone_name_BACKUP;
CREATE TABLE mysql.time_zone_transition LIKE mysql.time_zone_transition_BACKUP;
CREATE TABLE mysql.time_zone_transition_type LIKE mysql.time_zone_transition_type_BACKUP;
DROP TABLE mysql.time_zone;
DROP TABLE mysql.time_zone_name;
DROP TABLE mysql.time_zone_transition;
DROP TABLE mysql.time_zone_transition_type;
RENAME TABLE mysql.time_zone_BACKUP TO mysql.time_zone;
RENAME TABLE mysql.time_zone_name_BACKUP TO mysql.time_zone_name;
RENAME TABLE mysql.time_zone_transition_BACKUP TO mysql.time_zone_transition;
RENAME TABLE mysql.time_zone_transition_type_BACKUP TO mysql.time_zone_transition_type;
set global alter_algorithm=DEFAULT;

View File

@ -1,40 +0,0 @@
--source include/not_embedded.inc
# MDEV-33044 Loading time zones does not work with alter_algorithm INPLACE
set global alter_algorithm=INPLACE;
# Because loading timezones alters the mysql tables,
# this test will leave mysql in a different state than when it started.
# Furthermore, checksums on the various mysql.timezone_x tables will fail.
# Therefore we:
# 1. Make "backups" of the existing tables by renaming them
# 2. Make dummy clones of the tables we just backed up
# 3. Load timezones with alterations made to the dummy clone tables
# 4. Drop the newly made tables with changes made to them
# 5. Restore the backed up tables so the checksums will pass
RENAME TABLE mysql.time_zone TO mysql.time_zone_BACKUP;
RENAME TABLE mysql.time_zone_name TO mysql.time_zone_name_BACKUP;
RENAME TABLE mysql.time_zone_transition TO mysql.time_zone_transition_BACKUP;
RENAME TABLE mysql.time_zone_transition_type TO mysql.time_zone_transition_type_BACKUP;
CREATE TABLE mysql.time_zone LIKE mysql.time_zone_BACKUP;
CREATE TABLE mysql.time_zone_name LIKE mysql.time_zone_name_BACKUP;
CREATE TABLE mysql.time_zone_transition LIKE mysql.time_zone_transition_BACKUP;
CREATE TABLE mysql.time_zone_transition_type LIKE mysql.time_zone_transition_type_BACKUP;
--exec $MYSQL_TZINFO_TO_SQL std_data/zoneinfo | $MYSQL mysql
DROP TABLE mysql.time_zone;
DROP TABLE mysql.time_zone_name;
DROP TABLE mysql.time_zone_transition;
DROP TABLE mysql.time_zone_transition_type;
RENAME TABLE mysql.time_zone_BACKUP TO mysql.time_zone;
RENAME TABLE mysql.time_zone_name_BACKUP TO mysql.time_zone_name;
RENAME TABLE mysql.time_zone_transition_BACKUP TO mysql.time_zone_transition;
RENAME TABLE mysql.time_zone_transition_type_BACKUP TO mysql.time_zone_transition_type;
set global alter_algorithm=DEFAULT;

View File

@ -104,6 +104,10 @@ execute immediate if(@wsrep_cannot_replicate_tz, concat('ALTER TABLE time_zone_n
execute immediate if(@wsrep_cannot_replicate_tz, concat('ALTER TABLE time_zone_transition ENGINE=', @time_zone_transition_engine, ', ORDER BY Time_zone_id, Transition_time'), 'do 0');
execute immediate if(@wsrep_cannot_replicate_tz, concat('ALTER TABLE time_zone_transition_type ENGINE=', @time_zone_transition_type_engine, ', ORDER BY Time_zone_id, Transition_type_id'), 'do 0');
SET session alter_algorithm=@old_alter_alg;
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
SELECT COUNT(*) FROM time_zone;
COUNT(*)
2
@ -161,6 +165,10 @@ execute immediate if(@wsrep_cannot_replicate_tz, 'do 0','ALTER TABLE time_zone_t
SET SESSION SQL_LOG_BIN=@save_sql_log_bin;
execute immediate if(@wsrep_is_on, 'SET SESSION WSREP_ON=@save_wsrep_on', 'do 0');
SET session alter_algorithm=@old_alter_alg;
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
SELECT COUNT(*) FROM time_zone;
COUNT(*)
2
@ -481,6 +489,10 @@ execute immediate if(@wsrep_is_on, 'SET SESSION WSREP_ON=@save_wsrep_on', 'do 0'
# MDEV-29347 MariaDB 10.6.8 fails to start when ONLY_FULL_GROUP_BY gets provided
#
set sql_mode=only_full_group_by;
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
SELECT COUNT(*) FROM time_zone;
COUNT(*)
2

View File

@ -1972,169 +1972,6 @@ DROP USER 'user3'@'%';
update mysql.db set Delete_history_priv='Y' where db like 'test%';
drop table mysql.global_priv;
rename table mysql.global_priv_bak to mysql.global_priv;
#
# MDEV-16735 Upgrades only work if 'alter_algorithm' is 'DEFAULT'
# or 'COPY'. Test that the session value 'DEFAULT' in mysql_upgrade
# properly overrides the potentially incompatible global value.
#
SET GLOBAL alter_algorithm='INPLACE';
SHOW GLOBAL VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm INPLACE
Phase 1/8: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.global_priv OK
mysql.gtid_slave_pos OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.index_stats OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.roles_mapping OK
mysql.servers OK
mysql.table_stats OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.transaction_registry OK
Phase 2/8: Installing used storage engines... Skipped
Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK
sys.host_summary OK
sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK
sys.host_summary_by_stages OK
sys.host_summary_by_statement_latency OK
sys.host_summary_by_statement_type OK
sys.innodb_buffer_stats_by_schema OK
sys.innodb_buffer_stats_by_table OK
sys.innodb_lock_waits OK
sys.io_by_thread_by_latency OK
sys.io_global_by_file_by_bytes OK
sys.io_global_by_file_by_latency OK
sys.io_global_by_wait_by_bytes OK
sys.io_global_by_wait_by_latency OK
sys.latest_file_io OK
sys.memory_by_host_by_current_bytes OK
sys.memory_by_thread_by_current_bytes OK
sys.memory_by_user_by_current_bytes OK
sys.memory_global_by_current_bytes OK
sys.memory_global_total OK
sys.metrics OK
sys.privileges_by_table_by_level OK
sys.processlist OK
sys.ps_check_lost_instrumentation OK
sys.schema_auto_increment_columns OK
sys.schema_index_statistics OK
sys.schema_object_overview OK
sys.schema_redundant_indexes OK
sys.schema_table_lock_waits OK
sys.schema_table_statistics OK
sys.schema_table_statistics_with_buffer OK
sys.schema_tables_with_full_table_scans OK
sys.schema_unused_indexes OK
sys.session OK
sys.session_ssl_status OK
sys.statement_analysis OK
sys.statements_with_errors_or_warnings OK
sys.statements_with_full_table_scans OK
sys.statements_with_runtimes_in_95th_percentile OK
sys.statements_with_sorting OK
sys.statements_with_temp_tables OK
sys.user_summary OK
sys.user_summary_by_file_io OK
sys.user_summary_by_file_io_type OK
sys.user_summary_by_stages OK
sys.user_summary_by_statement_latency OK
sys.user_summary_by_statement_type OK
sys.version OK
sys.wait_classes_global_by_avg_latency OK
sys.wait_classes_global_by_latency OK
sys.waits_by_host_by_latency OK
sys.waits_by_user_by_latency OK
sys.waits_global_by_latency OK
sys.x$host_summary OK
sys.x$host_summary_by_file_io OK
sys.x$host_summary_by_file_io_type OK
sys.x$host_summary_by_stages OK
sys.x$host_summary_by_statement_latency OK
sys.x$host_summary_by_statement_type OK
sys.x$innodb_buffer_stats_by_schema OK
sys.x$innodb_buffer_stats_by_table OK
sys.x$innodb_lock_waits OK
sys.x$io_by_thread_by_latency OK
sys.x$io_global_by_file_by_bytes OK
sys.x$io_global_by_file_by_latency OK
sys.x$io_global_by_wait_by_bytes OK
sys.x$io_global_by_wait_by_latency OK
sys.x$latest_file_io OK
sys.x$memory_by_host_by_current_bytes OK
sys.x$memory_by_thread_by_current_bytes OK
sys.x$memory_by_user_by_current_bytes OK
sys.x$memory_global_by_current_bytes OK
sys.x$memory_global_total OK
sys.x$processlist OK
sys.x$ps_digest_95th_percentile_by_avg_us OK
sys.x$ps_digest_avg_latency_distribution OK
sys.x$ps_schema_table_statistics_io OK
sys.x$schema_flattened_keys OK
sys.x$schema_index_statistics OK
sys.x$schema_table_lock_waits OK
sys.x$schema_table_statistics OK
sys.x$schema_table_statistics_with_buffer OK
sys.x$schema_tables_with_full_table_scans OK
sys.x$session OK
sys.x$statement_analysis OK
sys.x$statements_with_errors_or_warnings OK
sys.x$statements_with_full_table_scans OK
sys.x$statements_with_runtimes_in_95th_percentile OK
sys.x$statements_with_sorting OK
sys.x$statements_with_temp_tables OK
sys.x$user_summary OK
sys.x$user_summary_by_file_io OK
sys.x$user_summary_by_file_io_type OK
sys.x$user_summary_by_stages OK
sys.x$user_summary_by_statement_latency OK
sys.x$user_summary_by_statement_type OK
sys.x$wait_classes_global_by_avg_latency OK
sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK
Phase 5/8: Fixing table and database names
Phase 6/8: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
sys
sys.sys_config OK
test
Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK
SET GLOBAL alter_algorithm=DEFAULT;
SHOW GLOBAL VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm DEFAULT
# End of 10.3 tests
# switching from mysql.global_priv to mysql.user
drop view mysql.user_bak;

View File

@ -405,19 +405,6 @@ update mysql.db set Delete_history_priv='Y' where db like 'test%';
drop table mysql.global_priv;
rename table mysql.global_priv_bak to mysql.global_priv;
--echo #
--echo # MDEV-16735 Upgrades only work if 'alter_algorithm' is 'DEFAULT'
--echo # or 'COPY'. Test that the session value 'DEFAULT' in mysql_upgrade
--echo # properly overrides the potentially incompatible global value.
--echo #
SET GLOBAL alter_algorithm='INPLACE';
SHOW GLOBAL VARIABLES LIKE 'alter_algorithm';
--exec $MYSQL_UPGRADE --force 2>&1
SET GLOBAL alter_algorithm=DEFAULT;
SHOW GLOBAL VARIABLES LIKE 'alter_algorithm';
--remove_file $MYSQLD_DATADIR/mariadb_upgrade_info
--echo # End of 10.3 tests
--source include/switch_to_mysql_user.inc

View File

@ -14,8 +14,8 @@ The following specify which files/extra groups are read (specified before remain
function from any library, for example exit() from
libc.so
--alter-algorithm[=name]
Specify the alter table algorithm. One of: DEFAULT, COPY,
INPLACE, NOCOPY, INSTANT
Unused. One of: DEFAULT, COPY, INPLACE, NOCOPY, INSTANT.
Deprecated, will be removed in a future release.
--analyze-sample-percentage=#
Percentage of rows from the table ANALYZE TABLE will
sample to collect table statistics. Set to 0 to let

View File

@ -1,4 +1,5 @@
call mtr.add_suppression("character set is multi-byte");
call mtr.add_suppression("exists only for compatibility");
drop table if exists t1;
create table t1 SELECT 1,"table 1";
repair table t1 use_frm;
@ -251,3 +252,40 @@ test.t1 repair status OK
set myisam_repair_threads = default;
drop table t1;
# End of 10.2 tests
#
# MDEV-33737 The way of ignoring alter-algorithm is inconsistent with
# other options and with itself
#
select * from information_schema.system_variables where variable_name = 'ALTER_ALGORITHM';
VARIABLE_NAME ALTER_ALGORITHM
SESSION_VALUE DEFAULT
GLOBAL_VALUE DEFAULT
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE DEFAULT
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST DEFAULT,COPY,INPLACE,NOCOPY,INSTANT
READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
GLOBAL_VALUE_PATH NULL
set alter_algorithm=COPY;
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
select @@alter_algorithm;
@@alter_algorithm
DEFAULT
set statement alter_algorithm=COPY FOR SELECT @@alter_algorithm;
@@alter_algorithm
DEFAULT
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
# restart: --alter-algorithm=COPY
select @@alter_algorithm;
@@alter_algorithm
DEFAULT
# End of 11.5 tests

View File

@ -6,6 +6,7 @@
--source include/default_charset.inc
call mtr.add_suppression("character set is multi-byte");
call mtr.add_suppression("exists only for compatibility");
--disable_warnings
drop table if exists t1;
@ -269,3 +270,21 @@ set myisam_repair_threads = default;
drop table t1;
--echo # End of 10.2 tests
--echo #
--echo # MDEV-33737 The way of ignoring alter-algorithm is inconsistent with
--echo # other options and with itself
--echo #
query_vertical select * from information_schema.system_variables where variable_name = 'ALTER_ALGORITHM';
set alter_algorithm=COPY;
select @@alter_algorithm;
set statement alter_algorithm=COPY FOR SELECT @@alter_algorithm;
--let $restart_parameters= --alter-algorithm=COPY
--source include/restart_mysqld.inc
select @@alter_algorithm;
--echo # End of 11.5 tests

View File

@ -20,6 +20,10 @@ SET @save_wsrep_mode=@@WSREP_MODE;
# Apply on node_1
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
'binlog stationary as expected'
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@WSREP_ON, @@SQL_LOG_BIN;
@wsrep_is_on @wsrep_cannot_replicate_tz @save_wsrep_on @save_sql_log_bin @@WSREP_ON @@SQL_LOG_BIN
@ -73,6 +77,10 @@ COUNT(*)
connection node_1;
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
'binlog stationary as expected'
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@WSREP_ON, @@SQL_LOG_BIN;
@wsrep_is_on @wsrep_cannot_replicate_tz @save_wsrep_on @save_sql_log_bin @@WSREP_ON @@SQL_LOG_BIN
@ -128,6 +136,10 @@ COUNT(*)
# Apply on node_1
connection node_1;
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
'binlog advanced as expected'
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@WSREP_ON, @@SQL_LOG_BIN;
@wsrep_is_on @wsrep_cannot_replicate_tz @save_wsrep_on @save_sql_log_bin @@WSREP_ON @@SQL_LOG_BIN
@ -186,6 +198,10 @@ TRUNCATE TABLE time_zone_leap_second;
connection node_1;
SET GLOBAL WSREP_MODE='';
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
'binlog advanced as expected'
SELECT @wsrep_is_on, @wsrep_cannot_replicate_tz, @save_wsrep_on, @save_sql_log_bin, @@WSREP_ON, @@SQL_LOG_BIN;
@wsrep_is_on @wsrep_cannot_replicate_tz @save_wsrep_on @save_sql_log_bin @@WSREP_ON @@SQL_LOG_BIN

View File

@ -1,150 +0,0 @@
--- alter_algorithm.result
+++ alter_algorithm.reject
@@ -7,40 +7,40 @@
INSERT INTO t1(f1, f2, f3) VALUES(1, 1, 1);
SELECT @@alter_algorithm;
@@alter_algorithm
-COPY
+INPLACE
# All the following cases needs table rebuild
# Add and Drop primary key
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Make existing column NULLABLE
ALTER TABLE t1 MODIFY f2 INT;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Drop Stored Column
ALTER TABLE t1 DROP COLUMN f5;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Add base non-generated column as a last column in the compressed table
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Add base non-generated column but not in the last position
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Force the table to rebuild
ALTER TABLE t1 FORCE;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Row format changes
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Engine table
ALTER TABLE t1 ENGINE=INNODB;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
@@ -56,22 +56,22 @@
FOREIGN KEY fidx(f1) REFERENCES t1(f1))ENGINE=INNODB;
INSERT INTO t1(f1, f2, f4, f5) VALUES(1, 2, 3, 4);
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t2, t1;
affected rows: 0
CREATE TABLE t1(f1 INT NOT NULL,
@@ -84,28 +84,27 @@
INSERT INTO t1(f1, f2) VALUES(1, 1);
# Add column at the end of the table
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL';
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Change virtual column expression
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Add virtual column
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Rename Column
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Rename table
ALTER TABLE t1 RENAME t3;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
# Drop Virtual Column
ALTER TABLE t3 DROP COLUMN vcol;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Column length varies
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20);
affected rows: 0
@@ -113,12 +112,12 @@
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 1;
affected rows: 0
ALTER TABLE t3 DROP FOREIGN KEY fidx;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t3, t2;
affected rows: 0

View File

@ -1,137 +0,0 @@
--- alter_algorithm.result
+++ alter_algorithm.reject
@@ -7,40 +7,32 @@
INSERT INTO t1(f1, f2, f3) VALUES(1, 1, 1);
SELECT @@alter_algorithm;
@@alter_algorithm
-COPY
+INSTANT
# All the following cases needs table rebuild
# Add and Drop primary key
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Make existing column NULLABLE
ALTER TABLE t1 MODIFY f2 INT;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Drop Stored Column
ALTER TABLE t1 DROP COLUMN f5;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Add base non-generated column as a last column in the compressed table
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Add base non-generated column but not in the last position
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Force the table to rebuild
ALTER TABLE t1 FORCE;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Row format changes
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Engine table
ALTER TABLE t1 ENGINE=INNODB;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
@@ -56,22 +48,17 @@
FOREIGN KEY fidx(f1) REFERENCES t1(f1))ENGINE=INNODB;
INSERT INTO t1(f1, f2, f4, f5) VALUES(1, 2, 3, 4);
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: DROP INDEX. Try ALGORITHM=NOCOPY
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: DROP INDEX. Try ALGORITHM=NOCOPY
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
DROP TABLE t2, t1;
affected rows: 0
CREATE TABLE t1(f1 INT NOT NULL,
@@ -84,28 +71,27 @@
INSERT INTO t1(f1, f2) VALUES(1, 1);
# Add column at the end of the table
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL';
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Change virtual column expression
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Add virtual column
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Rename Column
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Rename table
ALTER TABLE t1 RENAME t3;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
# Drop Virtual Column
ALTER TABLE t3 DROP COLUMN vcol;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Column length varies
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20);
affected rows: 0
@@ -113,12 +99,12 @@
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 1;
affected rows: 0
ALTER TABLE t3 DROP FOREIGN KEY fidx;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t3, t2;
affected rows: 0

View File

@ -1,142 +0,0 @@
--- alter_algorithm.result
+++ alter_algorithm.reject
@@ -7,40 +7,32 @@
INSERT INTO t1(f1, f2, f3) VALUES(1, 1, 1);
SELECT @@alter_algorithm;
@@alter_algorithm
-COPY
+NOCOPY
# All the following cases needs table rebuild
# Add and Drop primary key
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Make existing column NULLABLE
ALTER TABLE t1 MODIFY f2 INT;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Drop Stored Column
ALTER TABLE t1 DROP COLUMN f5;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Add base non-generated column as a last column in the compressed table
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Add base non-generated column but not in the last position
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Force the table to rebuild
ALTER TABLE t1 FORCE;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Row format changes
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
# Engine table
ALTER TABLE t1 ENGINE=INNODB;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+Got one of the listed errors
ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
@@ -56,22 +48,22 @@
FOREIGN KEY fidx(f1) REFERENCES t1(f1))ENGINE=INNODB;
INSERT INTO t1(f1, f2, f4, f5) VALUES(1, 2, 3, 4);
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t2, t1;
affected rows: 0
CREATE TABLE t1(f1 INT NOT NULL,
@@ -84,28 +76,27 @@
INSERT INTO t1(f1, f2) VALUES(1, 1);
# Add column at the end of the table
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL';
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Change virtual column expression
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Add virtual column
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Rename Column
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Rename table
ALTER TABLE t1 RENAME t3;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
# Drop Virtual Column
ALTER TABLE t3 DROP COLUMN vcol;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
# Column length varies
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20);
affected rows: 0
@@ -113,12 +104,12 @@
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1);
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 1;
affected rows: 0
ALTER TABLE t3 DROP FOREIGN KEY fidx;
-affected rows: 1
-info: Records: 1 Duplicates: 0 Warnings: 0
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t3, t2;
affected rows: 0

View File

@ -1,3 +1,6 @@
#
# sql_mode: alter_algorithm: COPY
#
CREATE TABLE t1(f1 INT NOT NULL,
f2 INT NOT NULL,
f3 INT NULL,
@ -5,40 +8,37 @@ 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;
@@alter_algorithm
COPY
# All the following cases needs table rebuild
# Add and Drop primary key
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1);
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1), ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Make existing column NULLABLE
ALTER TABLE t1 MODIFY f2 INT;
ALTER TABLE t1 MODIFY f2 INT, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Drop Stored Column
ALTER TABLE t1 DROP COLUMN f5;
ALTER TABLE t1 DROP COLUMN f5, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Add base non-generated column as a last column in the compressed table
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL;
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Add base non-generated column but not in the last position
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3;
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Force the table to rebuild
ALTER TABLE t1 FORCE;
ALTER TABLE t1 FORCE, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Row format changes
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
ALTER TABLE t1 ROW_FORMAT=COMPRESSED, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Engine table
ALTER TABLE t1 ENGINE=INNODB;
ALTER TABLE t1 ENGINE=INNODB, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
@ -55,21 +55,21 @@ 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);
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1;
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5;
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2);
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2), ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9;
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1);
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1), ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
DROP TABLE t2, t1;
@ -83,42 +83,390 @@ f3 VARCHAR(10),
INDEX(f1))ENGINE=INNODB;
INSERT INTO t1(f1, f2) VALUES(1, 1);
# Add column at the end of the table
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL';
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL', ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Change virtual column expression
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL;
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Add virtual column
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL;
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Rename Column
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL;
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Rename table
ALTER TABLE t1 RENAME t3;
ALTER TABLE t1 RENAME t3, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Drop Virtual Column
ALTER TABLE t3 DROP COLUMN vcol;
ALTER TABLE t3 DROP COLUMN vcol, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
# Column length varies
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20);
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20), ALGORITHM=COPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1);
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1), ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 1;
affected rows: 0
ALTER TABLE t3 DROP FOREIGN KEY fidx;
ALTER TABLE t3 DROP FOREIGN KEY fidx, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
DROP TABLE t3, t2;
affected rows: 0
#
# sql_mode: alter_algorithm: INPLACE
#
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);
# All the following cases needs table rebuild
# Add and Drop primary key
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Make existing column NULLABLE
ALTER TABLE t1 MODIFY f2 INT, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Drop Stored Column
ALTER TABLE t1 DROP COLUMN f5, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Add base non-generated column as a last column in the compressed table
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Add base non-generated column but not in the last position
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Force the table to rebuild
ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Row format changes
ALTER TABLE t1 ROW_FORMAT=COMPRESSED, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Engine table
ALTER TABLE t1 ENGINE=INNODB, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
affected rows: 0
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);
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t2, t1;
affected rows: 0
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);
# Add column at the end of the table
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL', ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Change virtual column expression
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Add virtual column
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Rename Column
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Rename table
ALTER TABLE t1 RENAME t3, ALGORITHM=INPLACE;
affected rows: 0
# Drop Virtual Column
ALTER TABLE t3 DROP COLUMN vcol, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Column length varies
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 1;
affected rows: 0
ALTER TABLE t3 DROP FOREIGN KEY fidx, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t3, t2;
affected rows: 0
#
# sql_mode: alter_algorithm: NOCOPY
#
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);
# All the following cases needs table rebuild
# Add and Drop primary key
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1), ALGORITHM=NOCOPY;
Got one of the listed errors
# Make existing column NULLABLE
ALTER TABLE t1 MODIFY f2 INT, ALGORITHM=NOCOPY;
Got one of the listed errors
# Drop Stored Column
ALTER TABLE t1 DROP COLUMN f5, ALGORITHM=NOCOPY;
Got one of the listed errors
# Add base non-generated column as a last column in the compressed table
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL, ALGORITHM=NOCOPY;
Got one of the listed errors
# Add base non-generated column but not in the last position
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3, ALGORITHM=NOCOPY;
Got one of the listed errors
# Force the table to rebuild
ALTER TABLE t1 FORCE, ALGORITHM=NOCOPY;
Got one of the listed errors
# Row format changes
ALTER TABLE t1 ROW_FORMAT=COMPRESSED, ALGORITHM=NOCOPY;
Got one of the listed errors
# Engine table
ALTER TABLE t1 ENGINE=INNODB, ALGORITHM=NOCOPY;
Got one of the listed errors
ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
affected rows: 0
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);
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2), ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1), ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t2, t1;
affected rows: 0
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);
# Add column at the end of the table
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL', ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Change virtual column expression
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Add virtual column
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Rename Column
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Rename table
ALTER TABLE t1 RENAME t3, ALGORITHM=NOCOPY;
affected rows: 0
# Drop Virtual Column
ALTER TABLE t3 DROP COLUMN vcol, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Column length varies
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20), ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1), ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 1;
affected rows: 0
ALTER TABLE t3 DROP FOREIGN KEY fidx, ALGORITHM=NOCOPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t3, t2;
affected rows: 0
#
# sql_mode: alter_algorithm: INSTANT
#
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);
# All the following cases needs table rebuild
# Add and Drop primary key
ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1), ALGORITHM=INSTANT;
Got one of the listed errors
# Make existing column NULLABLE
ALTER TABLE t1 MODIFY f2 INT, ALGORITHM=INSTANT;
Got one of the listed errors
# Drop Stored Column
ALTER TABLE t1 DROP COLUMN f5, ALGORITHM=INSTANT;
Got one of the listed errors
# Add base non-generated column as a last column in the compressed table
ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL, ALGORITHM=INSTANT;
Got one of the listed errors
# Add base non-generated column but not in the last position
ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3, ALGORITHM=INSTANT;
Got one of the listed errors
# Force the table to rebuild
ALTER TABLE t1 FORCE, ALGORITHM=INSTANT;
Got one of the listed errors
# Row format changes
ALTER TABLE t1 ROW_FORMAT=COMPRESSED, ALGORITHM=INSTANT;
Got one of the listed errors
# Engine table
ALTER TABLE t1 ENGINE=INNODB, ALGORITHM=INSTANT;
Got one of the listed errors
ALTER TABLE t1 FORCE, ALGORITHM=DEFAULT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
affected rows: 0
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);
ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1, ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
ALTER TABLE t1 DROP INDEX idx, page_compression_level=5, ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: DROP INDEX. Try ALGORITHM=NOCOPY
ALTER TABLE t1 ADD UNIQUE INDEX u1(f2), ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
ALTER TABLE t1 DROP INDEX f4, page_compression_level=9, ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: DROP INDEX. Try ALGORITHM=NOCOPY
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1), ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
DROP TABLE t2, t1;
affected rows: 0
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);
# Add column at the end of the table
ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL', ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Change virtual column expression
ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL, ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Add virtual column
ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL, ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Rename Column
ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL, ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Rename table
ALTER TABLE t1 RENAME t3, ALGORITHM=INSTANT;
affected rows: 0
# Drop Virtual Column
ALTER TABLE t3 DROP COLUMN vcol, ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
# Column length varies
ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20), ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 0;
affected rows: 0
ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1), ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET foreign_key_checks = 1;
affected rows: 0
ALTER TABLE t3 DROP FOREIGN KEY fidx, ALGORITHM=INSTANT;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t3, t2;
affected rows: 0

View File

@ -1,7 +1,5 @@
CREATE TABLE t1 (a INT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(1);
SET alter_algorithm='INPLACE';
affected rows: 0
PREPARE stmt FROM 'ALTER TABLE t1 ADD KEY idx(a)';
affected rows: 0
info: Statement prepared
@ -18,20 +16,6 @@ BEGIN
ALTER TABLE t1 DROP KEY idx2;
END|
affected rows: 0
SET alter_algorithm='COPY';
affected rows: 0
EXECUTE stmt;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
EXECUTE stmt1;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 0
call p1();
affected rows: 1
call p2();
affected rows: 1
SET alter_algorithm='NOCOPY';
affected rows: 0
EXECUTE stmt;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
@ -42,12 +26,6 @@ call p1();
affected rows: 0
call p2();
affected rows: 0
SET alter_algorithm='INSTANT';
affected rows: 0
EXECUTE stmt;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
call p1();
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: ADD INDEX. Try ALGORITHM=NOCOPY
DROP TABLE t1;
affected rows: 0
DROP PROCEDURE p1;
@ -64,9 +42,7 @@ affected rows: 0
INSERT INTO t1 VALUES(1,1),(2,2),(3,3);
affected rows: 3
info: Records: 3 Duplicates: 0 Warnings: 0
SET ALTER_ALGORITHM=INSTANT;
affected rows: 0
ALTER TABLE t1 DROP COLUMN col1;
ALTER TABLE t1 DROP COLUMN col1, ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=never. Try ALGORITHM=INPLACE
ALTER TABLE t1 DROP COLUMN col1, ALGORITHM=NOCOPY;
ERROR 0A000: ALGORITHM=NOCOPY is not supported. Reason: innodb_instant_alter_column_allowed=never. Try ALGORITHM=INPLACE

View File

@ -1,79 +0,0 @@
--- alter_not_null.result
+++ alter_not_null,COPY,NON-STRICT.result~
@@ -4,8 +4,8 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@@ -18,8 +18,8 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@@ -32,8 +32,8 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@@ -46,8 +46,8 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc';
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@@ -60,8 +60,8 @@
f1 f2 f3
2 2 NULL
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2);
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f3' at row 1
SELECT * FROM t1;
@@ -74,8 +74,8 @@
f1 b
10 NULL
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0);
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'b' at row 1
SELECT * FROM t1;
@@ -95,8 +95,8 @@
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
INSERT INTO t1 VALUES(1, NULL);
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'c2' at row 1
SELECT * FROM t1;

View File

@ -1,109 +0,0 @@
--- alter_not_null.result
+++ alter_not_null,COPY,STRICT.result~
@@ -4,13 +4,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-0
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 CHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
@@ -18,13 +15,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 VARCHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
@@ -32,13 +26,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 TEXT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
@@ -46,13 +37,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc';
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(2, 2, NULL);
@@ -60,13 +48,10 @@
f1 f2 f3
2 2 NULL
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2);
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f3' at row 1
+ERROR 01000: Data truncated for column 'f3' at row 1
SELECT * FROM t1;
f1 f2 f3
-2 2 0
+2 2 NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL DEFAULT 0, b TINYINT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(10, NULL);
@@ -74,13 +59,10 @@
f1 b
10 NULL
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0);
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'b' at row 1
+ERROR 01000: Data truncated for column 'b' at row 1
SELECT * FROM t1;
f1 b
-10 0
+10 NULL
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL;
@@ -95,8 +77,8 @@
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
INSERT INTO t1 VALUES(1, NULL);
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
+affected rows: 1
+info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'c2' at row 1
SELECT * FROM t1;

View File

@ -1,98 +0,0 @@
--- alter_not_null.result
+++ alter_not_null,INPLACE,STRICT.result~
@@ -4,13 +4,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-0
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 CHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
@@ -18,13 +15,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 VARCHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
@@ -32,13 +26,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL;
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 TEXT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
@@ -46,13 +37,10 @@
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc';
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f1' at row 1
+ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
-
+NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(2, 2, NULL);
@@ -60,13 +48,10 @@
f1 f2 f3
2 2 NULL
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2);
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'f3' at row 1
+ERROR 01000: Data truncated for column 'f3' at row 1
SELECT * FROM t1;
f1 f2 f3
-2 2 0
+2 2 NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL DEFAULT 0, b TINYINT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(10, NULL);
@@ -74,13 +59,10 @@
f1 b
10 NULL
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0);
-affected rows: 0
-info: Records: 0 Duplicates: 0 Warnings: 1
-Warnings:
-Warning 1265 Data truncated for column 'b' at row 1
+ERROR 01000: Data truncated for column 'b' at row 1
SELECT * FROM t1;
f1 b
-10 0
+10 NULL
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL;

View File

@ -0,0 +1,198 @@
#
# sql_mode: STRICT_TRANS_TABLES alter_algorithm: COPY
#
CREATE TABLE t1(f1 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL, ALGORITHM=COPY;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 CHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL, ALGORITHM=COPY;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 VARCHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL, ALGORITHM=COPY;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 TEXT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc', ALGORITHM=COPY;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(2, 2, NULL);
SELECT * FROM t1;
f1 f2 f3
2 2 NULL
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2), ALGORITHM=COPY;
ERROR 01000: Data truncated for column 'f3' at row 1
SELECT * FROM t1;
f1 f2 f3
2 2 NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL DEFAULT 0, b TINYINT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(10, NULL);
SELECT * FROM t1;
f1 b
10 NULL
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0), ALGORITHM=COPY;
ERROR 01000: Data truncated for column 'b' at row 1
SELECT * FROM t1;
f1 b
10 NULL
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL, ALGORITHM=COPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
CREATE TABLE t1 (a INT, v INT AS (a), d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 FORCE, ALGORITHM=COPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
INSERT INTO t1 VALUES(1, NULL);
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'c2' at row 1
SELECT * FROM t1;
c1 c2
1 0
DROP TABLE t1;
#
# MDEV-16126 Crash or ASAN heap-buffer-overflow in
# mach_read_from_n_little_endian upon ALTER TABLE with blob
#
CREATE TABLE t1(a INT, v INT AS (a), b INT, c BLOB) ENGINE=InnoDB;
ALTER TABLE t1 ADD PRIMARY KEY(b), ALGORITHM=COPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
#
# sql_mode: STRICT_TRANS_TABLES alter_algorithm: INPLACE
#
CREATE TABLE t1(f1 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL, ALGORITHM=INPLACE;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 CHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL, ALGORITHM=INPLACE;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 VARCHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL, ALGORITHM=INPLACE;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 TEXT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc', ALGORITHM=INPLACE;
ERROR 01000: Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(2, 2, NULL);
SELECT * FROM t1;
f1 f2 f3
2 2 NULL
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2), ALGORITHM=INPLACE;
ERROR 01000: Data truncated for column 'f3' at row 1
SELECT * FROM t1;
f1 f2 f3
2 2 NULL
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL DEFAULT 0, b TINYINT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(10, NULL);
SELECT * FROM t1;
f1 b
10 NULL
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0), ALGORITHM=INPLACE;
ERROR 01000: Data truncated for column 'b' at row 1
SELECT * FROM t1;
f1 b
10 NULL
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
CREATE TABLE t1 (a INT, v INT AS (a), d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
INSERT INTO t1 VALUES(1, NULL);
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'c2' at row 1
SELECT * FROM t1;
c1 c2
1 0
DROP TABLE t1;
#
# MDEV-16126 Crash or ASAN heap-buffer-overflow in
# mach_read_from_n_little_endian upon ALTER TABLE with blob
#
CREATE TABLE t1(a INT, v INT AS (a), b INT, c BLOB) ENGINE=InnoDB;
ALTER TABLE t1 ADD PRIMARY KEY(b), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;

View File

@ -1,11 +1,14 @@
#
# sql_mode: alter_algorithm: COPY
#
CREATE TABLE t1(f1 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@ -17,9 +20,9 @@ INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@ -31,9 +34,9 @@ INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL, ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@ -45,9 +48,9 @@ INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc';
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc', ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
@ -59,9 +62,9 @@ INSERT INTO t1 VALUES(2, 2, NULL);
SELECT * FROM t1;
f1 f2 f3
2 2 NULL
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2);
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2), ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f3' at row 1
SELECT * FROM t1;
@ -73,9 +76,9 @@ INSERT INTO t1 VALUES(10, NULL);
SELECT * FROM t1;
f1 b
10 NULL
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0);
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0), ALGORITHM=COPY;
affected rows: 1
info: Records: 1 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'b' at row 1
SELECT * FROM t1;
@ -83,12 +86,12 @@ f1 b
10 0
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL;
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL, ALGORITHM=COPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
CREATE TABLE t1 (a INT, v INT AS (a), d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 FORCE;
ALTER TABLE t1 FORCE, ALGORITHM=COPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
@ -108,7 +111,124 @@ DROP TABLE t1;
# mach_read_from_n_little_endian upon ALTER TABLE with blob
#
CREATE TABLE t1(a INT, v INT AS (a), b INT, c BLOB) ENGINE=InnoDB;
ALTER TABLE t1 ADD PRIMARY KEY(b);
ALTER TABLE t1 ADD PRIMARY KEY(b), ALGORITHM=COPY;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
#
# sql_mode: alter_algorithm: INPLACE
#
CREATE TABLE t1(f1 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
0
DROP TABLE t1;
CREATE TABLE t1(f1 CHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
DROP TABLE t1;
CREATE TABLE t1(f1 VARCHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
DROP TABLE t1;
CREATE TABLE t1(f1 TEXT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
f1
NULL
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc', ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f1' at row 1
SELECT * FROM t1;
f1
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(2, 2, NULL);
SELECT * FROM t1;
f1 f2 f3
2 2 NULL
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'f3' at row 1
SELECT * FROM t1;
f1 f2 f3
2 2 0
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL DEFAULT 0, b TINYINT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(10, NULL);
SELECT * FROM t1;
f1 b
10 NULL
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'b' at row 1
SELECT * FROM t1;
f1 b
10 0
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
CREATE TABLE t1 (a INT, v INT AS (a), d INT NOT NULL, e INT) ENGINE=InnoDB;
ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
INSERT INTO t1 VALUES(1, NULL);
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 1
Warnings:
Warning 1265 Data truncated for column 'c2' at row 1
SELECT * FROM t1;
c1 c2
1 0
DROP TABLE t1;
#
# MDEV-16126 Crash or ASAN heap-buffer-overflow in
# mach_read_from_n_little_endian upon ALTER TABLE with blob
#
CREATE TABLE t1(a INT, v INT AS (a), b INT, c BLOB) ENGINE=InnoDB;
ALTER TABLE t1 ADD PRIMARY KEY(b), ALGORITHM=INPLACE;
affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE t1;

View File

@ -1,18 +1,3 @@
set alter_algorithm=0;
create table bug53592(a int) engine=innodb row_format=compact;
alter table bug53592 add column b text charset utf8;
alter table bug53592 add column c blob not null;
create index bug53592_b on bug53592(b(81));
create unique index bug53592_c on bug53592(c(1));
set statement sql_mode = '' for
replace into bug53592 values (),();
Warnings:
Warning 1364 Field 'c' doesn't have a default value
check table bug53592;
Table Op Msg_type Msg_text
test.bug53592 check status OK
drop table bug53592;
set alter_algorithm=1;
create table bug53592(a int) engine=innodb row_format=compact;
alter table bug53592 add column b text charset utf8;
alter table bug53592 add column c blob not null;

View File

@ -0,0 +1 @@
--skip-innodb-read-only-compressed

View File

@ -1,15 +0,0 @@
[COPY]
--alter_algorithm=copy
--skip-innodb-read-only-compressed
[INPLACE]
--alter_algorithm=inplace
--skip-innodb-read-only-compressed
[NOCOPY]
--alter_algorithm=nocopy
--skip-innodb-read-only-compressed
[INSTANT]
--alter_algorithm=instant
--skip-innodb-read-only-compressed

View File

@ -1,2 +1,144 @@
# See also alter_algorithm.combinations
--source include/have_innodb.inc
let $algorithm = $alter_algorithm;
let $error_code = 0;
--echo #
--echo # sql_mode: $sql_mode alter_algorithm: $alter_algorithm
--echo #
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);
--enable_info
--echo # All the following cases needs table rebuild
--echo # Add and Drop primary key
--error $error_code
--eval ALTER TABLE t1 ADD COLUMN col1 INT NOT NULL,DROP PRIMARY KEY,ADD PRIMARY KEY(col1), ALGORITHM=$alter_algorithm
--echo # Make existing column NULLABLE
--error $error_code
--eval ALTER TABLE t1 MODIFY f2 INT, ALGORITHM=$alter_algorithm
--echo # Drop Stored Column
--error $error_code
--eval ALTER TABLE t1 DROP COLUMN f5, ALGORITHM=$alter_algorithm
--echo # Add base non-generated column as a last column in the compressed table
--error $error_code
--eval ALTER TABLE t1 ADD COLUMN f6 INT NOT NULL, ALGORITHM=$alter_algorithm
--echo # Add base non-generated column but not in the last position
--error $error_code
--eval ALTER TABLE t1 ADD COLUMN f7 INT NOT NULL after f3, ALGORITHM=$alter_algorithm
--echo # Force the table to rebuild
--error $error_code
--eval ALTER TABLE t1 FORCE, ALGORITHM=$alter_algorithm
--echo # Row format changes
--error $error_code
--eval ALTER TABLE t1 ROW_FORMAT=COMPRESSED, ALGORITHM=$alter_algorithm
--echo # Engine table
--error $error_code
--eval ALTER TABLE t1 ENGINE=INNODB, ALGORITHM=$alter_algorithm
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
--eval ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1, ALGORITHM=$alter_algorithm
--error $error_code
--eval ALTER TABLE t1 DROP INDEX idx, page_compression_level=5, ALGORITHM=$alter_algorithm
--error $error_code
--eval ALTER TABLE t1 ADD UNIQUE INDEX u1(f2), ALGORITHM=$alter_algorithm
--error $error_code
--eval ALTER TABLE t1 DROP INDEX f4, page_compression_level=9, ALGORITHM=$alter_algorithm
SET foreign_key_checks = 0;
--error $error_code
--eval ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1), ALGORITHM=$alter_algorithm
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
--eval ALTER TABLE t1 ADD COLUMN f4 char(100) default 'BIG WALL', ALGORITHM=$alter_algorithm
--echo # Change virtual column expression
--eval ALTER TABLE t1 CHANGE f3 f3 INT AS (f2 * f2) VIRTUAL, ALGORITHM=$alter_algorithm
--echo # Add virtual column
--eval ALTER TABLE t1 ADD COLUMN f5 INT AS (f2) VIRTUAL, ALGORITHM=$alter_algorithm
--echo # Rename Column
--eval ALTER TABLE t1 CHANGE f3 vcol INT AS (f2) VIRTUAL, ALGORITHM=$alter_algorithm
--echo # Rename table
--eval ALTER TABLE t1 RENAME t3, ALGORITHM=$alter_algorithm
--echo # Drop Virtual Column
--eval ALTER TABLE t3 DROP COLUMN vcol, ALGORITHM=$alter_algorithm
--echo # Column length varies
--eval ALTER TABLE t2 CHANGE f3 f3 VARCHAR(20), ALGORITHM=$alter_algorithm
SET foreign_key_checks = 0;
--eval ALTER TABLE t3 ADD FOREIGN KEY fidx(f2) REFERENCES t2(f1), ALGORITHM=$alter_algorithm
SET foreign_key_checks = 1;
--eval ALTER TABLE t3 DROP FOREIGN KEY fidx, ALGORITHM=$alter_algorithm
DROP TABLE t3, t2;
--disable_info

View File

@ -1,145 +1,10 @@
--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
let $alter_algorithm=COPY;
--source alter_algorithm.inc
let $alter_algorithm=INPLACE;
--source alter_algorithm.inc
let $alter_algorithm=NOCOPY;
--source alter_algorithm.inc
let $alter_algorithm=INSTANT;
--source alter_algorithm.inc

View File

@ -2,13 +2,7 @@
CREATE TABLE t1 (a INT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(1);
# alter_algorithm variable doesn't affect when ALTER stmt
# during PREPARE PHASE or CREATE PROCEDURE
# Only when execution/call happens, alter uses the alter_algorithm
# variable when user does not mention algorithm explicitly.
--enable_info
SET alter_algorithm='INPLACE';
PREPARE stmt FROM 'ALTER TABLE t1 ADD KEY idx(a)';
PREPARE stmt1 FROM 'ALTER TABLE t1 DROP KEY idx';
DELIMITER |;
@ -23,24 +17,11 @@ BEGIN
END|
DELIMITER ;|
SET alter_algorithm='COPY';
EXECUTE stmt;
EXECUTE stmt1;
call p1();
call p2();
SET alter_algorithm='NOCOPY';
EXECUTE stmt;
EXECUTE stmt1;
call p1();
call p2();
SET alter_algorithm='INSTANT';
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
EXECUTE stmt;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
call p1();
DROP TABLE t1;
DROP PROCEDURE p1;
DROP PROCEDURE p2;
@ -51,9 +32,8 @@ SET GLOBAL innodb_instant_alter_column_allowed=never;
CREATE TABLE t1(id INT PRIMARY KEY,
col1 INT UNSIGNED NOT NULL UNIQUE)ENGINE=InnoDB;
INSERT INTO t1 VALUES(1,1),(2,2),(3,3);
SET ALTER_ALGORITHM=INSTANT;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE t1 DROP COLUMN col1;
ALTER TABLE t1 DROP COLUMN col1, ALGORITHM=INSTANT;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE t1 DROP COLUMN col1, ALGORITHM=NOCOPY;
ALTER TABLE t1 DROP COLUMN col1, ALGORITHM=DEFAULT;

View File

@ -1,5 +0,0 @@
[COPY]
--alter_algorithm=copy
[INPLACE]
--alter_algorithm=inplace

View File

@ -0,0 +1,106 @@
# This test is run from alter_not_null.test with different combinations of
# alter_algorithm and strict mode
let $sql_mode = `SELECT @@SQL_MODE`;
let $error_code = 0;
if ($sql_mode == "STRICT_TRANS_TABLES") {
let $error_code = WARN_DATA_TRUNCATED;
}
--echo #
--echo # sql_mode: $sql_mode alter_algorithm: $alter_algorithm
--echo #
CREATE TABLE t1(f1 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
--eval ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL, ALGORITHM=$alter_algorithm
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 CHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
--eval ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL, ALGORITHM=$alter_algorithm
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 VARCHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
--eval ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL, ALGORITHM=$alter_algorithm
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 TEXT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
--eval ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc', ALGORITHM=$alter_algorithm
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(2, 2, NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
--eval ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2), ALGORITHM=$alter_algorithm
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL DEFAULT 0, b TINYINT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(10, NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
--eval ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0), ALGORITHM=$alter_algorithm
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
--enable_info
--eval ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL, ALGORITHM=$alter_algorithm
--disable_info
DROP TABLE t1;
CREATE TABLE t1 (a INT, v INT AS (a), d INT NOT NULL, e INT) ENGINE=InnoDB;
--enable_info
--eval ALTER TABLE t1 FORCE, ALGORITHM=$alter_algorithm
--disable_info
DROP TABLE t1;
# Alter ignore should work irrespective of sql mode
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
INSERT INTO t1 VALUES(1, NULL);
--enable_info
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
--echo #
--echo # MDEV-16126 Crash or ASAN heap-buffer-overflow in
--echo # mach_read_from_n_little_endian upon ALTER TABLE with blob
--echo #
CREATE TABLE t1(a INT, v INT AS (a), b INT, c BLOB) ENGINE=InnoDB;
--enable_info
--eval ALTER TABLE t1 ADD PRIMARY KEY(b), ALGORITHM=$alter_algorithm
--disable_info
DROP TABLE t1;

View File

@ -1,102 +1,7 @@
--source include/have_innodb.inc
# Run with STRICT and NOSCRIPT modes
--source alter_sql_mode.inc
let $sql_mode = `SELECT @@SQL_MODE`;
let $error_code = 0;
if ($sql_mode == "STRICT_TRANS_TABLES") {
let $error_code = WARN_DATA_TRUNCATED;
}
CREATE TABLE t1(f1 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
ALTER TABLE t1 CHANGE f1 f1 INT NOT NULL;
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 CHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
ALTER TABLE t1 CHANGE f1 f1 CHAR(10) NOT NULL;
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 VARCHAR(10))ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
ALTER TABLE t1 CHANGE f1 f1 VARCHAR(20) NOT NULL;
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 TEXT)ENGINE=INNODB;
INSERT INTO t1 VALUES(NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
ALTER TABLE t1 CHANGE f1 f1 TEXT NOT NULL DEFAULT 'abc';
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, f3 INT)ENGINE=INNODB;
INSERT INTO t1 VALUES(2, 2, NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
ALTER TABLE t1 CHANGE f3 f3 INT NOT NULL DEFAULT (f1 + f2);
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(f1 INT NOT NULL DEFAULT 0, b TINYINT)ENGINE=InnoDB;
INSERT INTO t1 VALUES(10, NULL);
SELECT * FROM t1;
--enable_info
--error $error_code
ALTER TABLE t1 CHANGE b b TINYINT NOT NULL DEFAULT if(unix_timestamp()>1,1000,0);
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a INT, v INT AS (a), c INT, d INT NOT NULL, e INT) ENGINE=InnoDB;
--enable_info
ALTER TABLE t1 DROP COLUMN c, CHANGE COLUMN e e INT NOT NULL;
--disable_info
DROP TABLE t1;
CREATE TABLE t1 (a INT, v INT AS (a), d INT NOT NULL, e INT) ENGINE=InnoDB;
--enable_info
ALTER TABLE t1 FORCE;
--disable_info
DROP TABLE t1;
# Alter ignore should work irrespective of sql mode
CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1))ENGINE=INNODB;
INSERT INTO t1 VALUES(1, NULL);
--enable_info
ALTER IGNORE TABLE t1 CHANGE c2 c2 INT NOT NULL DEFAULT 2;
--disable_info
SELECT * FROM t1;
DROP TABLE t1;
--echo #
--echo # MDEV-16126 Crash or ASAN heap-buffer-overflow in
--echo # mach_read_from_n_little_endian upon ALTER TABLE with blob
--echo #
CREATE TABLE t1(a INT, v INT AS (a), b INT, c BLOB) ENGINE=InnoDB;
--enable_info
ALTER TABLE t1 ADD PRIMARY KEY(b);
--disable_info
DROP TABLE t1;
let $alter_algorithm=COPY;
--source alter_not_null.inc
let $alter_algorithm=INPLACE;
--source alter_not_null.inc

View File

@ -4,9 +4,6 @@
--source include/have_innodb.inc
# Use FIC for index creation
set alter_algorithm=0;
create table bug53592(a int) engine=innodb row_format=compact;
alter table bug53592 add column b text charset utf8;
@ -33,32 +30,6 @@ check table bug53592;
drop table bug53592;
# Running the same set of test when "alter_algorithm" is turned on
set alter_algorithm=1;
create table bug53592(a int) engine=innodb row_format=compact;
alter table bug53592 add column b text charset utf8;
alter table bug53592 add column c blob not null;
# Create a non-unique nonclustered index
create index bug53592_b on bug53592(b(81));
# Create a unique index
create unique index bug53592_c on bug53592(c(1));
# This will trigger a dup key error and will require fetching
# the index number through a index structure for the error reporting.
# To get the correct index number, the code should go through index
# translation table. Otherwise, it will get the wrong index
# number and later trigger a server crash.
set statement sql_mode = '' for
replace into bug53592 values (),();
check table bug53592;
drop table bug53592;
# Test a dup key reported by foreign key constriant.
CREATE TABLE bug53592_1(
col1 int, col2 int,

View File

@ -1,8 +1,6 @@
#
# MDEV-22649 SIGSEGV in ha_partition::create_partitioning_metadata on ALTER
#
set @save_alter_algorithm= @@session.alter_algorithm;
SET SESSION alter_algorithm=4;
CREATE TABLE t1(a INT) engine=myisam PARTITION BY RANGE(a) SUBPARTITION BY KEY(a) (PARTITION p0 VALUES LESS THAN (10) (SUBPARTITION s0,SUBPARTITION s1), PARTITION p1 VALUES LESS THAN (20) (SUBPARTITION s2,SUBPARTITION s3));
show create table t1;
Table Create Table
@ -17,10 +15,9 @@ SUBPARTITION BY KEY (`a`)
PARTITION `p1` VALUES LESS THAN (20)
(SUBPARTITION `s2` ENGINE = MyISAM,
SUBPARTITION `s3` ENGINE = MyISAM))
ALTER TABLE t1 ADD COLUMN c INT;
ALTER TABLE t1 ADD COLUMN c INT,ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY
DROP table if exists t1;
set @@session.alter_algorithm= @save_alter_algorithm;
#
# MDEV-22804 SIGSEGV in ha_partition::create_partitioning_metadata |
# ERROR 1507 (HY000): Error in list of partitions to DROP

View File

@ -25,10 +25,7 @@ t2 CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`name` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPACT
SET ALTER_ALGORITHM=INSTANT;
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255);
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255), ALGORITHM=INSTANT;
ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=INPLACE
SET ALTER_ALGORITHM=INPLACE;
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255);
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255), ALGORITHM=INPLACE;
DROP TABLE t1, t2;
SET ALTER_ALGORITHM=DEFAULT;

View File

@ -14,15 +14,11 @@
--echo # MDEV-22649 SIGSEGV in ha_partition::create_partitioning_metadata on ALTER
--echo #
set @save_alter_algorithm= @@session.alter_algorithm;
SET SESSION alter_algorithm=4;
CREATE TABLE t1(a INT) engine=myisam PARTITION BY RANGE(a) SUBPARTITION BY KEY(a) (PARTITION p0 VALUES LESS THAN (10) (SUBPARTITION s0,SUBPARTITION s1), PARTITION p1 VALUES LESS THAN (20) (SUBPARTITION s2,SUBPARTITION s3));
show create table t1;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
ALTER TABLE t1 ADD COLUMN c INT;
ALTER TABLE t1 ADD COLUMN c INT,ALGORITHM=INSTANT;
DROP table if exists t1;
set @@session.alter_algorithm= @save_alter_algorithm;
--echo #
--echo # MDEV-22804 SIGSEGV in ha_partition::create_partitioning_metadata |

View File

@ -34,10 +34,7 @@ SHOW CREATE TABLE t2;
ALTER TABLE t2 REMOVE PARTITIONING;
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;
SHOW CREATE TABLE t2;
SET ALTER_ALGORITHM=INSTANT;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255);
SET ALTER_ALGORITHM=INPLACE;
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255);
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255), ALGORITHM=INSTANT;
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(255) NOT NULL DEFAULT repeat('a', 255), ALGORITHM=INPLACE;
DROP TABLE t1, t2;
SET ALTER_ALGORITHM=DEFAULT;

View File

@ -14,9 +14,8 @@ include/save_master_gtid.inc
connection slave;
include/sync_with_master_gtid.inc
connection master;
SET @@session.alter_algorithm='INSTANT';
SET @@session.gtid_domain_id=11;
ALTER TABLE t1 ADD COLUMN b int;
ALTER TABLE t1 ADD COLUMN b int, algorithm=instant;
# START Alter having exclusive lock is waiting for the signal
connection slave;
# FTWRL is sent first to wait for SA
@ -43,9 +42,9 @@ Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT) ENGINE=innodb
slave-bin.000001 # Gtid # # GTID #-#-# START ALTER
slave-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN b int
slave-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN b int, algorithm=instant
slave-bin.000001 # Gtid # # GTID #-#-# COMMIT ALTER id=#
slave-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN b int
slave-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN b int, algorithm=instant
connection master;
DROP TABLE t1;
connection slave;

View File

@ -7,10 +7,8 @@ a int PRIMARY KEY,
b varchar(50),
c varchar(50)
) CHARACTER SET=latin1 engine=innodb;
SET SESSION alter_algorithm='INSTANT';
ALTER TABLE tab MODIFY COLUMN b varchar(100);
SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab MODIFY COLUMN c varchar(100);
ALTER TABLE tab MODIFY COLUMN b varchar(100), algorithm=instant;
ALTER TABLE tab MODIFY COLUMN c varchar(100), algorithm=nocopy;
SHOW CREATE TABLE tab;
Table Create Table
tab CREATE TABLE `tab` (
@ -28,13 +26,13 @@ b varchar(50),
c varchar(50)
) CHARACTER SET=latin1 engine=innodb
master-bin.000001 # Gtid # # GTID #-#-# START ALTER
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100)
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100), algorithm=instant
master-bin.000001 # Gtid # # GTID #-#-# COMMIT ALTER id=#
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100)
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100), algorithm=instant
master-bin.000001 # Gtid # # GTID #-#-# START ALTER
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100)
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100), algorithm=nocopy
master-bin.000001 # Gtid # # GTID #-#-# COMMIT ALTER id=#
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100)
master-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100), algorithm=nocopy
connection slave;
SHOW CREATE TABLE tab;
Table Create Table
@ -53,13 +51,13 @@ b varchar(50),
c varchar(50)
) CHARACTER SET=latin1 engine=innodb
slave-bin.000001 # Gtid # # GTID #-#-# START ALTER
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100)
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100), algorithm=instant
slave-bin.000001 # Gtid # # GTID #-#-# COMMIT ALTER id=#
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100)
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN b varchar(100), algorithm=instant
slave-bin.000001 # Gtid # # GTID #-#-# START ALTER
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100)
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100), algorithm=nocopy
slave-bin.000001 # Gtid # # GTID #-#-# COMMIT ALTER id=#
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100)
slave-bin.000001 # Query # # use `test`; ALTER TABLE tab MODIFY COLUMN c varchar(100), algorithm=nocopy
connection master;
DROP TABLE tab;
connection slave;

View File

@ -1,493 +0,0 @@
include/master-slave.inc
[connection master]
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
start slave;
connection master;
set binlog_alter_two_phase=true;
create table t1(a int , b int) engine=innodb;
create table a1(a int , b int) engine=myisam;
create temporary table tmp_tbl(a int, b int) engine=innodb;
alter table t1 add column if not exists c int , force , algorithm=default;
alter table t1 add column d int first, force , algorithm=default;
alter table t1 add column e int after c, force , algorithm=default;
alter table t1 add column f int after c, force , add column g int first ,add column h char, algorithm=default;
alter table t1 drop column c, drop column d, drop column e, drop column f, drop column g , drop column h, force , algorithm=default;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f int after b, force , add column g int first ,add column h varchar(100), algorithm=default;
alter table t1 add index if not exists index_1(f), force , algorithm=default;
alter table t1 drop index index_1, force , algorithm=default;
alter table t1 add unique key unique_1(g), force , algorithm=default;
alter table t1 drop index unique_1, force , algorithm=default;
alter table t1 add fulltext key f_1(h), force , algorithm=default;
alter table t1 drop column f, drop column g , force , algorithm=default;
alter table t1 add primary key(h), force , algorithm=copy;
alter table t1 drop primary key, force , algorithm=copy;
alter table t1 drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b, add column g varchar(100) first ,add column h char, force , algorithm=default;
alter table t1 add period for system_time(f,h);
alter table t1 add system versioning;
alter table t1 drop system versioning;
alter table t1 drop column f, drop column g , drop column h, force , algorithm=default;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=default ;;
alter table t1 alter column f set default "****", force , algorithm=default ;;
alter table t1 alter column f drop default, force , algorithm=default ;;
alter table t1 change column g new_g char, force , algorithm=copy;;
alter table t1 modify column h varchar(100), force , algorithm=copy;;
alter table t1 drop column new_g ,drop column f, drop column h, force , algorithm=default ;;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=default;
alter table t1 add index if not exists index_1(f), force , algorithm=default;
alter table t1 disable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 enable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 rename t2, force , algorithm=default;
alter table t2 rename t1, force , algorithm=default;
alter table a1 order by a;
alter table t1 rename column f to new_f, force , algorithm=copy;
alter table t1 convert to character set 'utf8', force , algorithm=copy;
alter table t1 default character set 'utf8', force , algorithm=copy;
alter table t1 default collate 'utf8_icelandic_ci', force , algorithm=copy;
alter table t1 drop column new_f ,drop column g, drop column h, force , algorithm=default;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=default;
alter table t1 partition by hash(b) partitions 8;
alter table t1 remove partitioning;
alter table t1 drop column f ,drop column g, drop column h, force , algorithm=default;
# show binlog and clear status
connection slave;
reset master;
connection master;
connection master;
drop table t1, a1;
drop temporary table tmp_tbl;
connection slave;
include/stop_slave.inc
set global slave_parallel_threads = 0;;
set global slave_parallel_mode = optimistic;;
set global gtid_strict_mode = 0;;
include/start_slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
start slave;
connection master;
set binlog_alter_two_phase=true;
create table t1(a int , b int) engine=innodb;
create table a1(a int , b int) engine=myisam;
create temporary table tmp_tbl(a int, b int) engine=innodb;
alter table t1 add column if not exists c int , force , algorithm=inplace;
alter table t1 add column d int first, force , algorithm=inplace;
alter table t1 add column e int after c, force , algorithm=inplace;
alter table t1 add column f int after c, force , add column g int first ,add column h char, algorithm=inplace;
alter table t1 drop column c, drop column d, drop column e, drop column f, drop column g , drop column h, force , algorithm=inplace;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f int after b, force , add column g int first ,add column h varchar(100), algorithm=inplace;
alter table t1 add index if not exists index_1(f), force , algorithm=inplace;
alter table t1 drop index index_1, force , algorithm=inplace;
alter table t1 add unique key unique_1(g), force , algorithm=inplace;
alter table t1 drop index unique_1, force , algorithm=inplace;
alter table t1 add fulltext key f_1(h), force , algorithm=inplace;
alter table t1 drop column f, drop column g , force , algorithm=inplace;
alter table t1 add primary key(h), force , algorithm=copy;
alter table t1 drop primary key, force , algorithm=copy;
alter table t1 drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b, add column g varchar(100) first ,add column h char, force , algorithm=inplace;
alter table t1 add period for system_time(f,h);
alter table t1 add system versioning;
alter table t1 drop system versioning;
alter table t1 drop column f, drop column g , drop column h, force , algorithm=inplace;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=inplace ;;
alter table t1 alter column f set default "****", force , algorithm=inplace ;;
alter table t1 alter column f drop default, force , algorithm=inplace ;;
alter table t1 change column g new_g char, force , algorithm=copy;;
alter table t1 modify column h varchar(100), force , algorithm=copy;;
alter table t1 drop column new_g ,drop column f, drop column h, force , algorithm=inplace ;;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=inplace;
alter table t1 add index if not exists index_1(f), force , algorithm=inplace;
alter table t1 disable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 enable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 rename t2, force , algorithm=inplace;
alter table t2 rename t1, force , algorithm=inplace;
alter table a1 order by a;
alter table t1 rename column f to new_f, force , algorithm=copy;
alter table t1 convert to character set 'utf8', force , algorithm=copy;
alter table t1 default character set 'utf8', force , algorithm=copy;
alter table t1 default collate 'utf8_icelandic_ci', force , algorithm=copy;
alter table t1 drop column new_f ,drop column g, drop column h, force , algorithm=inplace;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=inplace;
alter table t1 partition by hash(b) partitions 8;
alter table t1 remove partitioning;
alter table t1 drop column f ,drop column g, drop column h, force , algorithm=inplace;
# show binlog and clear status
connection slave;
reset master;
connection master;
connection master;
drop table t1, a1;
drop temporary table tmp_tbl;
connection slave;
include/stop_slave.inc
set global slave_parallel_threads = 0;;
set global slave_parallel_mode = optimistic;;
set global gtid_strict_mode = 0;;
include/start_slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
start slave;
connection master;
set binlog_alter_two_phase=true;
create table t1(a int , b int) engine=innodb;
create table a1(a int , b int) engine=myisam;
create temporary table tmp_tbl(a int, b int) engine=innodb;
alter table t1 add column if not exists c int , force , algorithm=copy;
alter table t1 add column d int first, force , algorithm=copy;
alter table t1 add column e int after c, force , algorithm=copy;
alter table t1 add column f int after c, force , add column g int first ,add column h char, algorithm=copy;
alter table t1 drop column c, drop column d, drop column e, drop column f, drop column g , drop column h, force , algorithm=copy;
alter table tmp_tbl add column if not exists c int , force , algorithm=copy;
alter table tmp_tbl add column d int first, force , algorithm=copy;
alter table tmp_tbl add column e int after c, force , algorithm=copy;
alter table tmp_tbl add column f int after c, force , add column g int first ,add column h char, algorithm=copy;
alter table tmp_tbl drop column c, drop column d, drop column e, drop column f, drop column g , drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f int after b, force , add column g int first ,add column h varchar(100), algorithm=copy;
alter table t1 add index if not exists index_1(f), force , algorithm=copy;
alter table t1 drop index index_1, force , algorithm=copy;
alter table t1 add unique key unique_1(g), force , algorithm=copy;
alter table t1 drop index unique_1, force , algorithm=copy;
alter table t1 add fulltext key f_1(h), force , algorithm=copy;
alter table t1 drop column f, drop column g , force , algorithm=copy;
alter table tmp_tbl add column f int after b, force , add column g int first ,add column h varchar(100), algorithm=copy;
alter table tmp_tbl add index if not exists index_1(f), force , algorithm=copy;
alter table tmp_tbl drop index index_1, force , algorithm=copy;
alter table tmp_tbl add unique key unique_1(g), force , algorithm=copy;
alter table tmp_tbl drop index unique_1, force , algorithm=copy;
alter table tmp_tbl drop column f, drop column g , force , algorithm=copy;
alter table t1 add primary key(h), force , algorithm=copy;
alter table t1 drop primary key, force , algorithm=copy;
alter table t1 drop column h, force , algorithm=copy;
alter table tmp_tbl add primary key(h), force , algorithm=copy;
alter table tmp_tbl drop primary key, force , algorithm=copy;
alter table tmp_tbl drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b, add column g varchar(100) first ,add column h char, force , algorithm=copy;
alter table t1 add period for system_time(f,h);
alter table t1 add system versioning;
alter table t1 drop system versioning;
alter table t1 drop column f, drop column g , drop column h, force , algorithm=copy;
# show binlog and clear status
alter table tmp_tbl add column f varchar(100) after b, add column g varchar(100) first ,add column h char, force , algorithm=copy;
alter table tmp_tbl drop column f, drop column g , drop column h, force , algorithm=copy;
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=copy ;;
alter table t1 alter column f set default "****", force , algorithm=copy ;;
alter table t1 alter column f drop default, force , algorithm=copy ;;
alter table t1 change column g new_g char, force , algorithm=copy;;
alter table t1 modify column h varchar(100), force , algorithm=copy;;
alter table t1 drop column new_g ,drop column f, drop column h, force , algorithm=copy ;;
alter table tmp_tbl add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=copy ;;
alter table tmp_tbl alter column f set default "****", force , algorithm=copy ;;
alter table tmp_tbl alter column f drop default, force , algorithm=copy ;;
alter table tmp_tbl change column g new_g char, force , algorithm=copy;;
alter table tmp_tbl modify column h varchar(100), force , algorithm=copy;;
alter table tmp_tbl drop column new_g ,drop column f, drop column h, force , algorithm=copy ;;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=copy;
alter table t1 add index if not exists index_1(f), force , algorithm=copy;
alter table t1 disable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 enable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 rename t2, force , algorithm=copy;
alter table t2 rename t1, force , algorithm=copy;
alter table a1 order by a;
alter table t1 rename column f to new_f, force , algorithm=copy;
alter table t1 convert to character set 'utf8', force , algorithm=copy;
alter table t1 default character set 'utf8', force , algorithm=copy;
alter table t1 default collate 'utf8_icelandic_ci', force , algorithm=copy;
alter table t1 drop column new_f ,drop column g, drop column h, force , algorithm=copy;
alter table tmp_tbl add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=copy;
alter table tmp_tbl add index if not exists index_1(f), force , algorithm=copy;
alter table tmp_tbl disable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`tmp_tbl` doesn't have this option
alter table tmp_tbl enable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`tmp_tbl` doesn't have this option
alter table a1 order by a;
alter table tmp_tbl rename column f to new_f, force , algorithm=copy;
alter table tmp_tbl convert to character set 'utf8', force , algorithm=copy;
alter table tmp_tbl default character set 'utf8', force , algorithm=copy;
alter table tmp_tbl default collate 'utf8_icelandic_ci', force , algorithm=copy;
alter table tmp_tbl drop column new_f ,drop column g, drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=copy;
alter table t1 partition by hash(b) partitions 8;
alter table t1 remove partitioning;
alter table t1 drop column f ,drop column g, drop column h, force , algorithm=copy;
alter table tmp_tbl add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=copy;
alter table tmp_tbl drop column f ,drop column g, drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
connection master;
drop table t1, a1;
drop temporary table tmp_tbl;
connection slave;
include/stop_slave.inc
set global slave_parallel_threads = 0;;
set global slave_parallel_mode = optimistic;;
set global gtid_strict_mode = 0;;
include/start_slave.inc
# Prove formal support for nocopy and instant
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
start slave;
connection master;
set binlog_alter_two_phase=true;
create table t1(a int , b int) engine=innodb;
create table a1(a int , b int) engine=myisam;
create temporary table tmp_tbl(a int, b int) engine=innodb;
alter table t1 add column if not exists c int , force , algorithm=instant;
alter table t1 add column d int first, force , algorithm=instant;
alter table t1 add column e int after c, force , algorithm=instant;
alter table t1 add column f int after c, force , add column g int first ,add column h char, algorithm=instant;
alter table t1 drop column c, drop column d, drop column e, drop column f, drop column g , drop column h, force , algorithm=instant;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f int after b, force , add column g int first ,add column h varchar(100), algorithm=instant;
alter table t1 add index if not exists index_1(f), force , algorithm=instant;
alter table t1 drop index index_1, force , algorithm=instant;
alter table t1 add unique key unique_1(g), force , algorithm=instant;
alter table t1 drop index unique_1, force , algorithm=instant;
alter table t1 add fulltext key f_1(h), force , algorithm=instant;
alter table t1 drop column f, drop column g , force , algorithm=instant;
alter table t1 add primary key(h), force , algorithm=copy;
alter table t1 drop primary key, force , algorithm=copy;
alter table t1 drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b, add column g varchar(100) first ,add column h char, force , algorithm=instant;
alter table t1 add period for system_time(f,h);
alter table t1 add system versioning;
alter table t1 drop system versioning;
alter table t1 drop column f, drop column g , drop column h, force , algorithm=instant;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=instant ;;
alter table t1 alter column f set default "****", force , algorithm=instant ;;
alter table t1 alter column f drop default, force , algorithm=instant ;;
alter table t1 change column g new_g char, force , algorithm=copy;;
alter table t1 modify column h varchar(100), force , algorithm=copy;;
alter table t1 drop column new_g ,drop column f, drop column h, force , algorithm=instant ;;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=instant;
alter table t1 add index if not exists index_1(f), force , algorithm=instant;
alter table t1 disable keys, force , algorithm=copy;
alter table t1 enable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 rename t2, force , algorithm=instant;
alter table t2 rename t1, force , algorithm=instant;
alter table a1 order by a;
alter table t1 rename column f to new_f, force , algorithm=copy;
alter table t1 convert to character set 'utf8', force , algorithm=copy;
alter table t1 default character set 'utf8', force , algorithm=copy;
alter table t1 default collate 'utf8_icelandic_ci', force , algorithm=copy;
alter table t1 drop column new_f ,drop column g, drop column h, force , algorithm=instant;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=instant;
alter table t1 partition by hash(b) partitions 8;
alter table t1 remove partitioning;
alter table t1 drop column f ,drop column g, drop column h, force , algorithm=instant;
# show binlog and clear status
connection slave;
reset master;
connection master;
connection master;
drop table t1, a1;
drop temporary table tmp_tbl;
connection slave;
include/stop_slave.inc
set global slave_parallel_threads = 0;;
set global slave_parallel_mode = optimistic;;
set global gtid_strict_mode = 0;;
include/start_slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
start slave;
connection master;
set binlog_alter_two_phase=true;
create table t1(a int , b int) engine=innodb;
create table a1(a int , b int) engine=myisam;
create temporary table tmp_tbl(a int, b int) engine=innodb;
alter table t1 add column if not exists c int , force , algorithm=nocopy;
alter table t1 add column d int first, force , algorithm=nocopy;
alter table t1 add column e int after c, force , algorithm=nocopy;
alter table t1 add column f int after c, force , add column g int first ,add column h char, algorithm=nocopy;
alter table t1 drop column c, drop column d, drop column e, drop column f, drop column g , drop column h, force , algorithm=nocopy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f int after b, force , add column g int first ,add column h varchar(100), algorithm=nocopy;
alter table t1 add index if not exists index_1(f), force , algorithm=nocopy;
alter table t1 drop index index_1, force , algorithm=nocopy;
alter table t1 add unique key unique_1(g), force , algorithm=nocopy;
alter table t1 drop index unique_1, force , algorithm=nocopy;
alter table t1 add fulltext key f_1(h), force , algorithm=nocopy;
alter table t1 drop column f, drop column g , force , algorithm=nocopy;
alter table t1 add primary key(h), force , algorithm=copy;
alter table t1 drop primary key, force , algorithm=copy;
alter table t1 drop column h, force , algorithm=copy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b, add column g varchar(100) first ,add column h char, force , algorithm=nocopy;
alter table t1 add period for system_time(f,h);
alter table t1 add system versioning;
alter table t1 drop system versioning;
alter table t1 drop column f, drop column g , drop column h, force , algorithm=nocopy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=nocopy ;;
alter table t1 alter column f set default "****", force , algorithm=nocopy ;;
alter table t1 alter column f drop default, force , algorithm=nocopy ;;
alter table t1 change column g new_g char, force , algorithm=copy;;
alter table t1 modify column h varchar(100), force , algorithm=copy;;
alter table t1 drop column new_g ,drop column f, drop column h, force , algorithm=nocopy ;;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=nocopy;
alter table t1 add index if not exists index_1(f), force , algorithm=nocopy;
alter table t1 disable keys, force , algorithm=copy;
alter table t1 enable keys, force , algorithm=copy;
Warnings:
Note 1031 Storage engine InnoDB of the table `test`.`t1` doesn't have this option
alter table t1 rename t2, force , algorithm=nocopy;
alter table t2 rename t1, force , algorithm=nocopy;
alter table a1 order by a;
alter table t1 rename column f to new_f, force , algorithm=copy;
alter table t1 convert to character set 'utf8', force , algorithm=copy;
alter table t1 default character set 'utf8', force , algorithm=copy;
alter table t1 default collate 'utf8_icelandic_ci', force , algorithm=copy;
alter table t1 drop column new_f ,drop column g, drop column h, force , algorithm=nocopy;
# show binlog and clear status
connection slave;
reset master;
connection master;
alter table t1 add column f varchar(100) after b,add column g varchar(100) first ,add column h char, force , algorithm=nocopy;
alter table t1 partition by hash(b) partitions 8;
alter table t1 remove partitioning;
alter table t1 drop column f ,drop column g, drop column h, force , algorithm=nocopy;
# show binlog and clear status
connection slave;
reset master;
connection master;
connection master;
drop table t1, a1;
drop temporary table tmp_tbl;
connection slave;
include/stop_slave.inc
set global slave_parallel_threads = 0;;
set global slave_parallel_mode = optimistic;;
set global gtid_strict_mode = 0;;
include/start_slave.inc
include/rpl_end.inc

View File

@ -33,9 +33,8 @@ CREATE TABLE t1 (a INT) ENGINE=innodb;
--source include/sync_with_master_gtid.inc
--connection master
SET @@session.alter_algorithm='INSTANT';
SET @@session.gtid_domain_id=11;
ALTER TABLE t1 ADD COLUMN b int;
ALTER TABLE t1 ADD COLUMN b int, algorithm=instant;
--echo # START Alter having exclusive lock is waiting for the signal

View File

@ -11,10 +11,9 @@ CREATE OR REPLACE TABLE tab (
c varchar(50)
) CHARACTER SET=latin1 engine=innodb;
SET SESSION alter_algorithm='INSTANT';
ALTER TABLE tab MODIFY COLUMN b varchar(100);
SET SESSION alter_algorithm='NOCOPY';
ALTER TABLE tab MODIFY COLUMN c varchar(100);
ALTER TABLE tab MODIFY COLUMN b varchar(100), algorithm=instant;
ALTER TABLE tab MODIFY COLUMN c varchar(100), algorithm=nocopy;
SHOW CREATE TABLE tab;
--source include/show_binlog_events.inc

View File

@ -1,31 +0,0 @@
# This test will test all the option related to the Alter Table command
# NOTE not all alter statements will follow alter_algorithm since for some statements
# copy is only option
# parameters
# $alter_algorithm {DEFAULT|INPLACE|COPY|NOCOPY|INSTANT}
# $show_binlog
#
--source include/have_partition.inc
--source include/have_innodb.inc
--source include/master-slave.inc
--let $alter_algorithm= default
#--let $show_binlog= false
--source include/start_alter_options.inc
--let $alter_algorithm= inplace
--source include/start_alter_options.inc
--let $alter_algorithm= copy
--source include/start_alter_options.inc
--echo # Prove formal support for nocopy and instant
--let $alter_algorithm= instant
--source include/start_alter_options.inc
--let $alter_algorithm= nocopy
--source include/start_alter_options.inc
--source include/rpl_end.inc

View File

@ -1,89 +1,21 @@
SET @start_global_value = @@global.alter_algorithm;
SET GLOBAL alter_algorithm=1.1;
ERROR 42000: Incorrect argument type to variable 'alter_algorithm'
SET GLOBAL alter_algorithm=-1;
ERROR 42000: Variable 'alter_algorithm' can't be set to the value of '-1'
SET GLOBAL alter_algorithm=weird;
ERROR 42000: Variable 'alter_algorithm' can't be set to the value of 'weird'
SET GLOBAL alter_algorithm=4;
SELECT @@global.alter_algorithm;
@@global.alter_algorithm
INSTANT
SET GLOBAL alter_algorithm=3;
SELECT @@global.alter_algorithm;
@@global.alter_algorithm
NOCOPY
SET GLOBAL alter_algorithm=0;
SELECT @@global.alter_algorithm;
@@global.alter_algorithm
DEFAULT
SET GLOBAL alter_algorithm=1;
SELECT @@global.alter_algorithm;
@@global.alter_algorithm
COPY
SET GLOBAL alter_algorithm=2;
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
SELECT @@global.alter_algorithm;
@@global.alter_algorithm
INPLACE
DEFAULT
SET GLOBAL alter_algorithm=5;
ERROR 42000: Variable 'alter_algorithm' can't be set to the value of '5'
SELECT @@global.alter_algorithm;
@@global.alter_algorithm
INPLACE
SET GLOBAL alter_algorithm=NOCOPY;
SET alter_algorithm=1.1;
ERROR 42000: Incorrect argument type to variable 'alter_algorithm'
SET alter_algorithm=-1;
ERROR 42000: Variable 'alter_algorithm' can't be set to the value of '-1'
SET alter_algorithm=weird;
ERROR 42000: Variable 'alter_algorithm' can't be set to the value of 'weird'
SET alter_algorithm=4;
SELECT @@alter_algorithm;
@@alter_algorithm
INSTANT
SET alter_algorithm=3;
SELECT @@alter_algorithm;
@@alter_algorithm
NOCOPY
SET alter_algorithm=0;
SELECT @@alter_algorithm;
@@alter_algorithm
DEFAULT
SET alter_algorithm=1;
SELECT @@alter_algorithm;
@@alter_algorithm
COPY
SET alter_algorithm=2;
SELECT @@alter_algorithm;
@@alter_algorithm
INPLACE
SET alter_algorithm=5;
ERROR 42000: Variable 'alter_algorithm' can't be set to the value of '5'
SELECT @@alter_algorithm;
@@alter_algorithm
INPLACE
SET SESSION alter_algorithm=INSTANT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm INSTANT
SET SESSION alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm NOCOPY
SET SESSION alter_algorithm='DEFAULT';
Warnings:
Warning 4200 The variable '@@alter_algorithm' is deleted and ignored. It it only exists for compatiblity with old installations
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm DEFAULT
SET SESSION alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm NOCOPY
SET GLOBAL alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm NOCOPY
SET SESSION alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
Variable_name Value
alter_algorithm DEFAULT
SET GLOBAL alter_algorithm = @start_global_value;

View File

@ -25,7 +25,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ALTER_ALGORITHM
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
VARIABLE_COMMENT Specify the alter table algorithm
VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL

View File

@ -25,7 +25,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ALTER_ALGORITHM
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
VARIABLE_COMMENT Specify the alter table algorithm
VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL

View File

@ -1,18 +1,5 @@
SET @start_global_value = @@global.alter_algorithm;
--error ER_WRONG_TYPE_FOR_VAR
SET GLOBAL alter_algorithm=1.1;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL alter_algorithm=-1;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL alter_algorithm=weird;
SET GLOBAL alter_algorithm=4;
SELECT @@global.alter_algorithm;
SET GLOBAL alter_algorithm=3;
SELECT @@global.alter_algorithm;
SET GLOBAL alter_algorithm=0;
SELECT @@global.alter_algorithm;
SET GLOBAL alter_algorithm=1;
SELECT @@global.alter_algorithm;
SET GLOBAL alter_algorithm=2;
SELECT @@global.alter_algorithm;
@ -20,39 +7,5 @@ SELECT @@global.alter_algorithm;
SET GLOBAL alter_algorithm=5;
SELECT @@global.alter_algorithm;
SET GLOBAL alter_algorithm=NOCOPY;
--error ER_WRONG_TYPE_FOR_VAR
SET alter_algorithm=1.1;
--error ER_WRONG_VALUE_FOR_VAR
SET alter_algorithm=-1;
--error ER_WRONG_VALUE_FOR_VAR
SET alter_algorithm=weird;
SET alter_algorithm=4;
SELECT @@alter_algorithm;
SET alter_algorithm=3;
SELECT @@alter_algorithm;
SET alter_algorithm=0;
SELECT @@alter_algorithm;
SET alter_algorithm=1;
SELECT @@alter_algorithm;
SET alter_algorithm=2;
SELECT @@alter_algorithm;
--error ER_WRONG_VALUE_FOR_VAR
SET alter_algorithm=5;
SELECT @@alter_algorithm;
SET SESSION alter_algorithm=INSTANT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
SET SESSION alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
SET SESSION alter_algorithm='DEFAULT';
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
SET SESSION alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
SET GLOBAL alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
SET SESSION alter_algorithm=DEFAULT;
SHOW SESSION VARIABLES LIKE 'alter_algorithm';
SET GLOBAL alter_algorithm = @start_global_value;

View File

@ -5333,6 +5333,7 @@ static int init_server_components()
/* removed in 11.5 */
MARIADB_REMOVED_OPTION("wsrep-load-data-splitting"),
MARIADB_REMOVED_OPTION("alter-algorithm"),
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};

View File

@ -1235,8 +1235,6 @@ handle_rpl_parallel_thread(void *arg)
thd->system_thread= SYSTEM_THREAD_SLAVE_SQL;
thd->security_ctx->skip_grants();
thd->variables.max_allowed_packet= slave_max_allowed_packet;
/* Ensure that slave can exeute any alter table it gets from master */
thd->variables.alter_algorithm= (ulong) Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT;
thd->slave_thread= 1;
set_slave_thread_options(thd);

View File

@ -5531,9 +5531,6 @@ pthread_handler_t handle_slave_sql(void *arg)
*/
thd->variables.binlog_annotate_row_events= 0;
/* Ensure that slave can exeute any alter table it gets from master */
thd->variables.alter_algorithm= (ulong) Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT;
server_threads.insert(thd);
/*
We are going to set slave_running to 1. Assuming slave I/O thread is

View File

@ -186,9 +186,7 @@ bool Alter_info::supports_lock(THD *thd, bool online,
case HA_ALTER_INPLACE_EXCLUSIVE_LOCK:
// If SHARED lock and no particular algorithm was requested, use COPY.
if (requested_lock == Alter_info::ALTER_TABLE_LOCK_SHARED &&
algorithm(thd) == Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT &&
thd->variables.alter_algorithm ==
Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
algorithm(thd) == Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
return false;
if (requested_lock == Alter_info::ALTER_TABLE_LOCK_SHARED ||
@ -258,7 +256,7 @@ Alter_info::enum_alter_table_algorithm
Alter_info::algorithm(const THD *thd) const
{
if (requested_algorithm == ALTER_TABLE_ALGORITHM_NONE)
return (Alter_info::enum_alter_table_algorithm) thd->variables.alter_algorithm;
return ALTER_TABLE_ALGORITHM_DEFAULT;
return requested_algorithm;
}

View File

@ -816,7 +816,7 @@ typedef struct system_variables
ulong query_cache_type;
ulong tx_isolation;
ulong updatable_views_with_limit;
ulong alter_algorithm;
ulong alter_algorithm_unused;
ulong server_id;
ulong session_track_transaction_info;
ulong threadpool_priority;

View File

@ -11177,10 +11177,7 @@ do_continue:;
// If SHARED lock and no particular algorithm was requested, use COPY.
if (ha_alter_info.inplace_supported == HA_ALTER_INPLACE_EXCLUSIVE_LOCK &&
alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_SHARED &&
alter_info->algorithm(thd) ==
Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT &&
thd->variables.alter_algorithm ==
Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
alter_info->algorithm(thd) == Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
use_inplace= false;
if (ha_alter_info.inplace_supported == HA_ALTER_INPLACE_NOT_SUPPORTED)

View File

@ -2831,10 +2831,23 @@ static Sys_var_mybool Sys_skip_grant_tables(
static const char *alter_algorithm_modes[]= {"DEFAULT", "COPY", "INPLACE",
"NOCOPY", "INSTANT", NULL};
static bool variable_is_ignored(sys_var *self, THD *thd, set_var *var)
{
var->save_result.longlong_value= 0;
return false;
}
static Sys_var_enum Sys_alter_algorithm(
"alter_algorithm", "Specify the alter table algorithm",
SESSION_VAR(alter_algorithm), CMD_LINE(OPT_ARG),
alter_algorithm_modes, DEFAULT(0));
"alter_algorithm",
UNUSED_HELP,
SESSION_VAR(alter_algorithm_unused),
CMD_LINE(OPT_ARG, OPT_REMOVED_OPTION),
alter_algorithm_modes, DEFAULT(0),
NO_MUTEX_GUARD, NOT_IN_BINLOG,
ON_CHECK(variable_is_ignored), ON_UPDATE(0),
DEPRECATED(1105,""));
static bool check_old_passwords(sys_var *self, THD *thd, set_var *var)
{

View File

@ -1,16 +0,0 @@
#
# MDEV-32683 Spider engine does not load with non-default alter-algorithm
#
set global alter_algorithm=INSTANT;
install plugin spider soname 'ha_spider';
select plugin_name, plugin_status, plugin_type, plugin_license, load_option from information_schema.plugins where plugin_name like 'spider';
plugin_name plugin_status plugin_type plugin_license load_option
SPIDER ACTIVE STORAGE ENGINE GPL ON
uninstall plugin spider;
drop table mysql.spider_link_failed_log, mysql.spider_link_mon_servers, mysql.spider_tables, mysql.spider_table_crd, mysql.spider_table_position_for_recovery, mysql.spider_table_sts, mysql.spider_xa, mysql.spider_xa_failed_log, mysql.spider_xa_member;
drop function spider_direct_sql;
drop function spider_bg_direct_sql;
drop function spider_ping_table;
drop function spider_copy_tables;
drop function spider_flush_table_mon_cache;
set global alter_algorithm=DEFAULT;

View File

@ -1,14 +0,0 @@
--echo #
--echo # MDEV-32683 Spider engine does not load with non-default alter-algorithm
--echo #
set global alter_algorithm=INSTANT;
install plugin spider soname 'ha_spider';
select plugin_name, plugin_status, plugin_type, plugin_license, load_option from information_schema.plugins where plugin_name like 'spider';
uninstall plugin spider;
drop table mysql.spider_link_failed_log, mysql.spider_link_mon_servers, mysql.spider_tables, mysql.spider_table_crd, mysql.spider_table_position_for_recovery, mysql.spider_table_sts, mysql.spider_xa, mysql.spider_xa_failed_log, mysql.spider_xa_member;
drop function spider_direct_sql;
drop function spider_bg_direct_sql;
drop function spider_ping_table;
drop function spider_copy_tables;
drop function spider_flush_table_mon_cache;
set global alter_algorithm=DEFAULT;