Skip to content

Commit

Permalink
Fixed mdev-15120 CTE table should not belong to database, that is in use
Browse files Browse the repository at this point in the history
When identifying a table name the following should be taken into account:
a CTE name cannot be qualified with a database name, otherwise the table
name is considered as the name of a non-CTE table.
  • Loading branch information
igorbabaev committed Jan 31, 2018
1 parent bc7a1dc commit 1951e7f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
10 changes: 10 additions & 0 deletions mysql-test/r/cte_nonrecursive.result
Expand Up @@ -1369,3 +1369,13 @@ n_nationkey n_name n_regionkey r_regionkey r_name
23 UNITED KINGDOM 3 3 EUROPE
drop view v;
drop table region, nation;
#
# MDEV-15120: cte name used with database name
#
WITH cte AS (SELECT 1 AS a) SELECT test.cte.a FROM test.cte;
ERROR 42S02: Table 'test.cte' doesn't exist
CREATE DATABASE db1;
USE db1;
WITH cte AS (SELECT 1 AS a) SELECT db1.cte.a FROM db1.cte;
ERROR 42S02: Table 'db1.cte' doesn't exist
DROP DATABASE db1;
15 changes: 15 additions & 0 deletions mysql-test/t/cte_nonrecursive.test
Expand Up @@ -929,3 +929,18 @@ select * from v;

drop view v;
drop table region, nation;

--echo #
--echo # MDEV-15120: cte name used with database name
--echo #

--error ER_NO_SUCH_TABLE
WITH cte AS (SELECT 1 AS a) SELECT test.cte.a FROM test.cte;

CREATE DATABASE db1;
USE db1;

--error ER_NO_SUCH_TABLE
WITH cte AS (SELECT 1 AS a) SELECT db1.cte.a FROM db1.cte;

DROP DATABASE db1;
3 changes: 2 additions & 1 deletion sql/sql_cte.cc
Expand Up @@ -240,7 +240,8 @@ With_element *With_clause::find_table_def(TABLE_LIST *table,
with_elem= with_elem->next)
{
if (my_strcasecmp(system_charset_info, with_elem->query_name->str,
table->table_name.str) == 0)
table->table_name.str) == 0 &&
!table->is_fqtn)
{
table->set_derived();
return with_elem;
Expand Down

0 comments on commit 1951e7f

Please sign in to comment.