Commit 8a809365 authored by unknown's avatar unknown

#view.test#:

  new file
sql_table.cc, handler.h:
  Fixed bug #14540.
  Added error mnemonic code HA_ADMIN_NOT_BASE_TABLE
  to report that an operation cannot be applied for views.
view.test, view.result:
  Added a test case for bug #14540.
errmsg.txt:
  Fixed bug #14540.
  Added error ER_CHECK_NOT_BASE_TABLE.


mysql-test/r/view.result:
  Added a test case for bug #14540.
mysql-test/t/view.test:
  Added a test case for bug #14540.
sql/handler.h:
  Fixed bug #14540.
  Added error mnemonic code HA_ADMIN_NOT_BASE_TABLE
  to report that an operation cannot be applied for views.
sql/share/errmsg.txt:
  Added error ER_CHECK_NOT_BASE_TABLE.
sql/sql_table.cc:
  Fixed bug #14540.
  Added error mnemonic code HA_ADMIN_NOT_BASE_TABLE
  to report that an operation cannot be applied for views.
parent 02ac7bef
...@@ -2323,3 +2323,22 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -2323,3 +2323,22 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where 1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
DROP VIEW v1,v2; DROP VIEW v1,v2;
DROP TABLE t1,t2,t3; DROP TABLE t1,t2,t3;
CREATE TABLE t1(id INT) ENGINE=MyISAM;
CREATE VIEW v1 AS SELECT id FROM t1;
OPTIMIZE TABLE v1;
Table Op Msg_type Msg_text
test.v1 optimize note You cannot apply optimize to a view
ANALYZE TABLE v1;
Table Op Msg_type Msg_text
test.v1 analyze note You cannot apply analyze to a view
REPAIR TABLE v1;
Table Op Msg_type Msg_text
test.v1 repair note You cannot apply repair to a view
DROP TABLE t1;
OPTIMIZE TABLE v1;
Table Op Msg_type Msg_text
test.v1 optimize note You cannot apply optimize to a view
Warnings:
Error 1146 Table 'test.t1' doesn't exist
Error 1356 View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
DROP VIEW v1;
...@@ -2189,4 +2189,19 @@ EXPLAIN SELECT * FROM v2 WHERE a=1; ...@@ -2189,4 +2189,19 @@ EXPLAIN SELECT * FROM v2 WHERE a=1;
DROP VIEW v1,v2; DROP VIEW v1,v2;
DROP TABLE t1,t2,t3; DROP TABLE t1,t2,t3;
#
# Bug #14540: OPTIMIZE, ANALYZE, REPAIR applied to not a view
#
CREATE TABLE t1(id INT) ENGINE=MyISAM;
CREATE VIEW v1 AS SELECT id FROM t1;
OPTIMIZE TABLE v1;
ANALYZE TABLE v1;
REPAIR TABLE v1;
DROP TABLE t1;
OPTIMIZE TABLE v1;
DROP VIEW v1;
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#define HA_ADMIN_REJECT -6 #define HA_ADMIN_REJECT -6
#define HA_ADMIN_TRY_ALTER -7 #define HA_ADMIN_TRY_ALTER -7
#define HA_ADMIN_WRONG_CHECKSUM -8 #define HA_ADMIN_WRONG_CHECKSUM -8
#define HA_ADMIN_NOT_BASE_TABLE -9
/* Bits in table_flags() to show what database can do */ /* Bits in table_flags() to show what database can do */
......
...@@ -5421,3 +5421,5 @@ ER_NO_REFERENCED_ROW_2 23000 ...@@ -5421,3 +5421,5 @@ ER_NO_REFERENCED_ROW_2 23000
eng "Cannot add or update a child row: a foreign key constraint fails (%.192s)" eng "Cannot add or update a child row: a foreign key constraint fails (%.192s)"
ER_SP_BAD_VAR_SHADOW 42000 ER_SP_BAD_VAR_SHADOW 42000
eng "Variable '%-.64s' must be quoted with `...`, or renamed" eng "Variable '%-.64s' must be quoted with `...`, or renamed"
ER_CHECK_NOT_BASE_TABLE 4200
eng "You cannot apply %s to a view"
...@@ -2189,7 +2189,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ...@@ -2189,7 +2189,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
/* if view are unsupported */ /* if view are unsupported */
if (table->view && view_operator_func == NULL) if (table->view && view_operator_func == NULL)
{ {
result_code= HA_ADMIN_NOT_IMPLEMENTED; result_code= HA_ADMIN_NOT_BASE_TABLE;
goto send_result; goto send_result;
} }
thd->open_options&= ~extra_open_options; thd->open_options&= ~extra_open_options;
...@@ -2324,6 +2324,16 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ...@@ -2324,6 +2324,16 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
} }
break; break;
case HA_ADMIN_NOT_BASE_TABLE:
{
char buf[ERRMSGSIZE+20];
uint length=my_snprintf(buf, ERRMSGSIZE,
ER(ER_CHECK_NOT_BASE_TABLE), operator_name);
protocol->store("note", 4, system_charset_info);
protocol->store(buf, length, system_charset_info);
}
break;
case HA_ADMIN_OK: case HA_ADMIN_OK:
protocol->store("status", 6, system_charset_info); protocol->store("status", 6, system_charset_info);
protocol->store("OK",2, system_charset_info); protocol->store("OK",2, system_charset_info);
...@@ -2424,16 +2434,19 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ...@@ -2424,16 +2434,19 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
break; break;
} }
} }
if (fatal_error) if (table->table)
table->table->s->version=0; // Force close of table
else if (open_for_modify)
{ {
pthread_mutex_lock(&LOCK_open); if (fatal_error)
remove_table_from_cache(thd, table->table->s->db, table->table->s->version=0; // Force close of table
table->table->s->table_name, RTFC_NO_FLAG); else if (open_for_modify)
pthread_mutex_unlock(&LOCK_open); {
/* May be something modified consequently we have to invalidate cache */ pthread_mutex_lock(&LOCK_open);
query_cache_invalidate3(thd, table->table, 0); remove_table_from_cache(thd, table->table->s->db,
table->table->s->table_name, RTFC_NO_FLAG);
pthread_mutex_unlock(&LOCK_open);
/* Something may be modified, that's why we have to invalidate cache */
query_cache_invalidate3(thd, table->table, 0);
}
} }
close_thread_tables(thd); close_thread_tables(thd);
table->table=0; // For query cache table->table=0; // For query cache
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment