Commit ff485d2d authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-5438 A view can mask a table that supports discovery

parent 0c0fe7a8
create table t1 (a int) engine=archive;
create view t1 as select "I am a view" as a;
ERROR 42S01: Table 't1' already exists
drop table t1;
create table t1 (a int) engine=archive;
grant select on test.t1 to foo@bar;
drop user foo@bar;
drop table t1;
create table t1 (a int) engine=archive;
create table t2 (a int);
alter table t2 rename t1;
ERROR 42S01: Table 't1' already exists
drop table t2, t1;
#
# MDEV-5438 - A view can mask a table that supports discovery
#
# in a few places the server was still using !access(path, F_OK) to
# determine whether a table exists
#
source include/have_archive.inc;
create table t1 (a int) engine=archive;
--error ER_TABLE_EXISTS_ERROR
create view t1 as select "I am a view" as a;
drop table t1;
create table t1 (a int) engine=archive;
grant select on test.t1 to foo@bar;
drop user foo@bar;
drop table t1;
create table t1 (a int) engine=archive;
create table t2 (a int);
--error ER_TABLE_EXISTS_ERROR
alter table t2 rename t1;
drop table t2, t1;
...@@ -5413,12 +5413,7 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list, ...@@ -5413,12 +5413,7 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list,
{ {
if (!(rights & CREATE_ACL)) if (!(rights & CREATE_ACL))
{ {
char buf[FN_REFLEN + 1]; if (!ha_table_exists(thd, table_list->db, table_list->table_name, 0))
build_table_filename(buf, sizeof(buf) - 1, table_list->db,
table_list->table_name, reg_ext, 0);
fn_format(buf, buf, "", "", MY_UNPACK_FILENAME | MY_RESOLVE_SYMLINKS |
MY_RETURN_REAL_PATH | MY_APPEND_EXT);
if (access(buf,F_OK))
{ {
my_error(ER_NO_SUCH_TABLE, MYF(0), table_list->db, table_list->alias); my_error(ER_NO_SUCH_TABLE, MYF(0), table_list->db, table_list->alias);
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
......
...@@ -7840,7 +7840,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, ...@@ -7840,7 +7840,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
Table maybe does not exist, but we got an exclusive lock Table maybe does not exist, but we got an exclusive lock
on the name, now we can safely try to find out for sure. on the name, now we can safely try to find out for sure.
*/ */
if (!access(alter_ctx.get_new_filename(), F_OK)) if (ha_table_exists(thd, alter_ctx.new_db, alter_ctx.new_name, 0))
{ {
/* Table will be closed in do_command() */ /* Table will be closed in do_command() */
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alter_ctx.new_alias); my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alter_ctx.new_alias);
......
...@@ -908,7 +908,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, ...@@ -908,7 +908,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
fn_format(path_buff, file.str, dir.str, "", MY_UNPACK_FILENAME); fn_format(path_buff, file.str, dir.str, "", MY_UNPACK_FILENAME);
path.length= strlen(path_buff); path.length= strlen(path_buff);
if (!access(path.str, F_OK)) if (ha_table_exists(thd, view->db, view->table_name, NULL))
{ {
if (mode == VIEW_CREATE_NEW) if (mode == VIEW_CREATE_NEW)
{ {
......
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