summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2013-08-28 22:16:03 +0200
committerSergei Golubchik <sergii@pisem.net>2013-08-28 22:16:03 +0200
commit68325b6a12dbe8fc2e95ba69b4537e1d4d52e204 (patch)
tree026c7afbfdbb8ee2552ca6b460c13a6fb13ea712
parent214c43ba96d806629e24818099edf45e7cabdd66 (diff)
downloadmariadb-git-68325b6a12dbe8fc2e95ba69b4537e1d4d52e204.tar.gz
Test case for MyISAM and OPTIMIZE TABLE
that requires MDL_SHARED_NO_READ_WRITE.
-rw-r--r--mysql-test/r/myisam_optimize.result23
-rw-r--r--mysql-test/t/myisam_optimize.test47
2 files changed, 70 insertions, 0 deletions
diff --git a/mysql-test/r/myisam_optimize.result b/mysql-test/r/myisam_optimize.result
new file mode 100644
index 00000000000..185d49e6391
--- /dev/null
+++ b/mysql-test/r/myisam_optimize.result
@@ -0,0 +1,23 @@
+call mtr.add_suppression(" marked as crashed and should be repaired");
+create table t1 (a int auto_increment primary key, b text);
+insert t1 (b) select repeat("A", 100);
+insert t1 (b) select repeat("B", 200) from t1;
+insert t1 (b) select repeat("C", 300) from t1;
+delete from t1 where a < 3;
+explain select a, left(b,10) from t1 order by a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using filesort
+select left(b,10), a from t1 order by a;
+left(b,10) a
+CCCCCCCCCC 3
+CCCCCCCCCC 4
+set debug_sync='myisam_after_repair_by_sort wait_for go';
+optimize table t1;
+select a, left(b,10) from t1 order by a;
+set debug_sync='now signal go';
+Table Op Msg_type Msg_text
+test.t1 optimize status OK
+a left(b,10)
+3 CCCCCCCCCC
+4 CCCCCCCCCC
+drop table t1;
diff --git a/mysql-test/t/myisam_optimize.test b/mysql-test/t/myisam_optimize.test
new file mode 100644
index 00000000000..da47a7a4127
--- /dev/null
+++ b/mysql-test/t/myisam_optimize.test
@@ -0,0 +1,47 @@
+#
+# test OPTIMIZE and a concurrent SELECT of a MyISAM table
+#
+source include/have_debug_sync.inc;
+
+call mtr.add_suppression(" marked as crashed and should be repaired");
+
+create table t1 (a int auto_increment primary key, b text);
+insert t1 (b) select repeat("A", 100);
+insert t1 (b) select repeat("B", 200) from t1;
+insert t1 (b) select repeat("C", 300) from t1;
+
+delete from t1 where a < 3;
+explain select a, left(b,10) from t1 order by a;
+select left(b,10), a from t1 order by a;
+
+set debug_sync='myisam_after_repair_by_sort wait_for go';
+send optimize table t1;
+
+connect (con1,localhost,root,,);
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state like "%myisam_after_repair_by_sort%";
+--source include/wait_condition.inc
+
+send select a, left(b,10) from t1 order by a;
+
+connect (con2,localhost,root,,);
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Waiting for table metadata lock";
+--source include/wait_condition.inc
+
+set debug_sync='now signal go';
+
+connection default;
+reap;
+
+connection con1;
+reap;
+
+disconnect con1;
+disconnect con2;
+connection default;
+
+drop table t1;
+