MDEV-5438 A view can mask a table that supports discovery
This commit is contained in:
parent
0c0fe7a862
commit
ff485d2dc4
13
mysql-test/suite/archive/discover_5438.result
Normal file
13
mysql-test/suite/archive/discover_5438.result
Normal file
@ -0,0 +1,13 @@
|
||||
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;
|
25
mysql-test/suite/archive/discover_5438.test
Normal file
25
mysql-test/suite/archive/discover_5438.test
Normal file
@ -0,0 +1,25 @@
|
||||
#
|
||||
# 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,
|
||||
{
|
||||
if (!(rights & CREATE_ACL))
|
||||
{
|
||||
char buf[FN_REFLEN + 1];
|
||||
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))
|
||||
if (!ha_table_exists(thd, table_list->db, table_list->table_name, 0))
|
||||
{
|
||||
my_error(ER_NO_SUCH_TABLE, MYF(0), table_list->db, table_list->alias);
|
||||
DBUG_RETURN(TRUE);
|
||||
|
@ -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
|
||||
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() */
|
||||
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alter_ctx.new_alias);
|
||||
|
@ -908,7 +908,7 @@ loop_out:
|
||||
fn_format(path_buff, file.str, dir.str, "", MY_UNPACK_FILENAME);
|
||||
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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user