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,
{
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 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
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)
{
......
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