Commit d93559f9 authored by Chaithra Gopalareddy's avatar Chaithra Gopalareddy

Bug#12626844 : WE ARE NOT CHECKING VIEW TABLE NAMES

               ENOUGH - CONCAT() HACKS. ALSO WRONG
               ERROR MESSAGE WHILE TRYING TO CREATE
               A VIEW ON A NON EXISTING DATABASE

PROBLEM:
The first part of the problem is concluded as not a
bug, as 'concat' is not a reserved word and it is
completely valid to create a view with the name
'concat'.

The second issue is, while trying to create a view on
a non existing database, we are not giving a proper error
message.

FIX:
We have added a check for the database existence while
trying to create a view. This check would give an error
as 'unknown database' when the database does not exist.

This patch is a backport of the patch for Bug#13601606
parent 08006055
...@@ -4102,3 +4102,10 @@ UNLOCK TABLES; ...@@ -4102,3 +4102,10 @@ UNLOCK TABLES;
# Connection default # Connection default
DROP PROCEDURE p1; DROP PROCEDURE p1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#12626844: WRONG ERROR MESSAGE WHILE CREATING A VIEW ON A
# NON EXISTING DATABASE
#
DROP DATABASE IF EXISTS nodb;
CREATE VIEW nodb.a AS SELECT 1;
ERROR 42000: Unknown database 'nodb'
...@@ -4136,6 +4136,17 @@ disconnect con2; ...@@ -4136,6 +4136,17 @@ disconnect con2;
disconnect con3; disconnect con3;
--echo #
--echo # Bug#12626844: WRONG ERROR MESSAGE WHILE CREATING A VIEW ON A
--echo # NON EXISTING DATABASE
--echo #
--disable_warnings
DROP DATABASE IF EXISTS nodb;
--enable_warnings
--error ER_BAD_DB_ERROR
CREATE VIEW nodb.a AS SELECT 1;
# Check that all connections opened by test cases in this file are really # Check that all connections opened by test cases in this file are really
# gone so execution of other tests won't be affected by their presence. # gone so execution of other tests won't be affected by their presence.
--source include/wait_until_count_sessions.inc --source include/wait_until_count_sessions.inc
...@@ -444,6 +444,13 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views, ...@@ -444,6 +444,13 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
view= lex->unlink_first_table(&link_to_local); view= lex->unlink_first_table(&link_to_local);
if (check_db_dir_existence(view->db))
{
my_error(ER_BAD_DB_ERROR, MYF(0), view->db);
res= TRUE;
goto err;
}
if (mode == VIEW_ALTER && fill_defined_view_parts(thd, view)) if (mode == VIEW_ALTER && fill_defined_view_parts(thd, view))
{ {
res= TRUE; res= TRUE;
......
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