summaryrefslogtreecommitdiff
path: root/mysql-test/suite/storage_engine/alter_table_online.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/storage_engine/alter_table_online.test')
-rw-r--r--mysql-test/suite/storage_engine/alter_table_online.test160
1 files changed, 160 insertions, 0 deletions
diff --git a/mysql-test/suite/storage_engine/alter_table_online.test b/mysql-test/suite/storage_engine/alter_table_online.test
new file mode 100644
index 00000000000..94dec2a72bb
--- /dev/null
+++ b/mysql-test/suite/storage_engine/alter_table_online.test
@@ -0,0 +1,160 @@
+#
+# ALTER ONLINE TABLE
+#
+
+--source have_engine.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1,t2,t3;
+--enable_warnings
+
+#
+# Test of things that can be done online
+# We are repeating notification here, because for some engines
+# only a part of these ALTER ONLINE statements might be supported.
+#
+
+let $create_definition = a $int_col, b $int_col, c $char_col;
+--source create_table.inc
+
+INSERT INTO t1 (a,b,c) VALUES (1,100,'a'),(2,200,'b'),(3,300,'c');
+
+--let $online = 1
+--let $alter_definition = MODIFY b $int_col DEFAULT 5
+--source alter_table.inc
+if ($mysql_errname)
+{
+ --source unexpected_result.inc
+}
+
+--let $online = 1
+--let $alter_definition = CHANGE b new_name $int_col
+--source alter_table.inc
+if ($mysql_errname)
+{
+ --source unexpected_result.inc
+}
+
+--let $online = 1
+--let $alter_definition = COMMENT 'new comment'
+--source alter_table.inc
+if ($mysql_errname)
+{
+ --source unexpected_result.inc
+}
+
+--let $online = 1
+--let $rename_to = t2
+--source alter_table.inc
+if ($mysql_errname)
+{
+ --source unexpected_result.inc
+ DROP TABLE t1;
+}
+DROP TABLE IF EXISTS t2;
+
+#
+# temporary tables always require a copy
+#
+
+--let $temporary = 1
+--source create_table.inc
+
+INSERT INTO t1 (a,b) VALUES (1,'a'),(2,'b'),(3,'c');
+
+--let $error_codes = ER_CANT_DO_ONLINE
+--let $online = 1
+--let $alter_definition = MODIFY b $int_col DEFAULT 5
+--source alter_table.inc
+if ($mysql_errname != ER_CANT_DO_ONLINE)
+{
+ --source unexpected_result.inc
+}
+
+
+--let $error_codes = ER_CANT_DO_ONLINE
+--let $online = 1
+--let $alter_definition = CHANGE b new_name $int_col
+--source alter_table.inc
+
+--let $error_codes = ER_CANT_DO_ONLINE
+--let $online = 1
+--let $alter_definition = COMMENT 'new comment'
+--source alter_table.inc
+
+--let $error_codes = ER_CANT_DO_ONLINE
+--let $online = 1
+--let $rename_to = t2
+--source alter_table.inc
+
+DROP TABLE t1;
+
+#
+# Test of things that is not possible to do online
+#
+
+--let $create_definition = a $int_col, b $int_col, c $char_col
+--source create_table.inc
+
+INSERT INTO t1 (a,b,c) VALUES (1,100,'a'),(2,200,'b'),(3,300,'c');
+
+--let $error_codes = ER_CANT_DO_ONLINE
+--let $online = 1
+--let $alter_definition = DROP COLUMN b, ADD b $int_col
+--source alter_table.inc
+if ($mysql_errname!=ER_CANT_DO_ONLINE)
+{
+ --source unexpected_result.inc
+}
+
+--let $error_codes = ER_CANT_DO_ONLINE
+--let $online = 1
+--let $alter_definition = MODIFY b BIGINT $default_col_opts
+--source alter_table.inc
+
+--let $alternative_engine = `SELECT engine FROM information_schema.engines WHERE engine != '$storage_engine' AND support IN ('YES','DEFAULT')`
+
+--let $error_codes = ER_CANT_DO_ONLINE
+--let $online = 1
+--let $alter_definition = ENGINE=$alternative_engine
+--source alter_table.inc
+
+DROP TABLE t1;
+
+--let $create_definition = a $int_col, b $int_indexed_col, c $char_col
+--source create_table.inc
+if ($mysql_errname)
+{
+ --let $functionality = Column options
+ --source unexpected_result.inc
+}
+if (!$mysql_errname)
+{
+ --let $error_codes = ER_CANT_DO_ONLINE
+ --let $online = 1
+ --let $alter_definition = ADD INDEX (b)
+ --source alter_table.inc
+ if ($mysql_errname!=ER_CANT_DO_ONLINE)
+ {
+ --let $functionality = Adding an index or ALTER ONLINE
+ --source unexpected_result.inc
+ }
+
+ --let $alter_definition = ADD INDEX (b)
+ --source alter_table.inc
+ if ($mysql_errname)
+ {
+ --let $functionality = Adding an index or ALTER TABLE
+ --source unexpected_result.inc
+ }
+ if (!$mysql_errname)
+ {
+ --let $error_codes = ER_CANT_DO_ONLINE
+ --let $online = 1
+ --let $alter_definition = DROP INDEX b
+ --source alter_table.inc
+ }
+ DROP TABLE t1;
+}
+
+--source cleanup_engine.inc