summaryrefslogtreecommitdiff
blob: 6ada096c7e7af4d8cdb0a5791af04c89dba89fc3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 0014bdc7eef141dcd66930e853242b3be4960831 Mon Sep 17 00:00:00 2001
From: Sergei Golubchik <serg@mariadb.org>
Date: Thu, 7 May 2015 22:18:34 +0200
Subject: [PATCH] MDEV-8115 mysql_upgrade crashes the server with REPAIR VIEW

on REPAIR don't do table-specific stuff for views
(because even if the view has a temp table opened for it,
it's not opened all the way down the engine. In particular,
Aria crashes in maria_status() because MARIA_HA* info - that is
table->table->file->file - is NULL)
---
 mysql-test/r/repair.result | 7 +++++++
 mysql-test/t/repair.test   | 9 +++++++++
 sql/sql_admin.cc           | 2 +-
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/mysql-test/r/repair.result b/mysql-test/r/repair.result
index 52ae9c3..51c3374 100644
--- a/mysql-test/r/repair.result
+++ b/mysql-test/r/repair.result
@@ -207,3 +207,10 @@ check table t1;
 Table	Op	Msg_type	Msg_text
 test.t1	check	status	OK
 drop table t1;
+create table t1 (a blob);
+create view v1 as select * from t1;
+repair view v1;
+Table	Op	Msg_type	Msg_text
+test.v1	repair	status	OK
+drop view v1;
+drop table t1;
diff --git a/mysql-test/t/repair.test b/mysql-test/t/repair.test
index 337b73f..f625965 100644
--- a/mysql-test/t/repair.test
+++ b/mysql-test/t/repair.test
@@ -208,3 +208,12 @@ repair table t1 use_frm;
 select count(*) from t1;
 check table t1;
 drop table t1;
+
+#
+# MDEV-8115 mysql_upgrade crashes the server with REPAIR VIEW
+#
+create table t1 (a blob);
+create view v1 as select * from t1;
+repair view v1;
+drop view v1;
+drop table t1;
diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc
index 44057b6..9827c67 100644
--- a/sql/sql_admin.cc
+++ b/sql/sql_admin.cc
@@ -901,7 +901,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
         break;
       }
     }
-    if (table->table)
+    if (table->table && !table->view)
     {
       if (table->table->s->tmp_table)
       {