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))
|
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,
|
|||||||
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 @@ loop_out:
|
|||||||
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)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user