diff options
author | Igor Babaev <igor@askmonty.org> | 2018-02-06 08:26:50 -0800 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2018-02-06 08:26:50 -0800 |
commit | 90885985b6e74c64a19180a561d7e59155938d45 (patch) | |
tree | 7f6d792ca1b899ec2357afb6a2ca27583b469891 | |
parent | b4fbb4183b35f921efe079a312b0c1be87866b40 (diff) | |
download | mariadb-git-90885985b6e74c64a19180a561d7e59155938d45.tar.gz |
Fixed mdev-15120 CTE table should not belong to database, that is in use
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.
-rw-r--r-- | mysql-test/r/cte_nonrecursive.result | 10 | ||||
-rw-r--r-- | mysql-test/t/cte_nonrecursive.test | 15 | ||||
-rw-r--r-- | sql/sql_cte.cc | 3 |
3 files changed, 27 insertions, 1 deletions
diff --git a/mysql-test/r/cte_nonrecursive.result b/mysql-test/r/cte_nonrecursive.result index 4f193384d0f..dc48c1b58dd 100644 --- a/mysql-test/r/cte_nonrecursive.result +++ b/mysql-test/r/cte_nonrecursive.result @@ -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; diff --git a/mysql-test/t/cte_nonrecursive.test b/mysql-test/t/cte_nonrecursive.test index a092a161277..1af91dd38c0 100644 --- a/mysql-test/t/cte_nonrecursive.test +++ b/mysql-test/t/cte_nonrecursive.test @@ -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; diff --git a/sql/sql_cte.cc b/sql/sql_cte.cc index ecb984cb2ce..461369bdd1d 100644 --- a/sql/sql_cte.cc +++ b/sql/sql_cte.cc @@ -223,7 +223,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) == 0) + table->table_name) == 0 && + !table->is_fqtn) { table->set_derived(); return with_elem; |