summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <gluh@mysql.com>2005-05-07 12:21:48 +0000
committerunknown <gluh@mysql.com>2005-05-07 12:21:48 +0000
commit8ed5d70f6eac85e384127e0b346444e4930812d6 (patch)
treee171f4065ee957453c3df73f2e03da6c39dd277f
parent0228f897259751242398164dd4be6689146b8377 (diff)
parente4c24674433f699e8fa082abd3df0d13f5529e1f (diff)
downloadmariadb-git-8ed5d70f6eac85e384127e0b346444e4930812d6.tar.gz
Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/gluh/MySQL/Bugs/5.0.9897 sql/sql_table.cc: Auto merged
-rw-r--r--mysql-test/r/check.result9
-rw-r--r--mysql-test/t/check.test12
-rw-r--r--sql/sql_table.cc7
3 files changed, 28 insertions, 0 deletions
diff --git a/mysql-test/r/check.result b/mysql-test/r/check.result
index ecaa13642bd..4c565f4f1b1 100644
--- a/mysql-test/r/check.result
+++ b/mysql-test/r/check.result
@@ -5,3 +5,12 @@ insert into t1 values (200000);
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
+Create table t1(f1 int);
+Create table t2(f1 int);
+Create view v1 as Select * from t1;
+Check Table v1,t2;
+Table Op Msg_type Msg_text
+test.v1 check status OK
+test.t2 check status OK
+drop view v1;
+drop table t1, t2;
diff --git a/mysql-test/t/check.test b/mysql-test/t/check.test
index bc61aea2d66..c502655818d 100644
--- a/mysql-test/t/check.test
+++ b/mysql-test/t/check.test
@@ -22,3 +22,15 @@ connection con1;
reap;
drop table t1;
+#
+# Bug #9897 Views: 'Check Table' crashes MySQL, with a view and a table
+# in the statement
+#
+
+connection default;
+Create table t1(f1 int);
+Create table t2(f1 int);
+Create view v1 as Select * from t1;
+Check Table v1,t2;
+drop view v1;
+drop table t1, t2;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 6fcde27b537..bbe7c53147b 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -2344,6 +2344,13 @@ send_result_message:
}
close_thread_tables(thd);
table->table=0; // For query cache
+ /*
+ thd->lex->derived_tables may be set to non zero value if we open
+ a view. It is necessary to clear thd->lex->derived_tables flag
+ to prevent processing of derived tables during next open_and_lock_tables
+ if next table is a real table.
+ */
+ thd->lex->derived_tables= 0;
if (protocol->write())
goto err;
}