diff options
-rw-r--r-- | mysql-test/r/cte_nonrecursive.result | 18 | ||||
-rw-r--r-- | mysql-test/t/cte_nonrecursive.test | 20 | ||||
-rw-r--r-- | sql/temporary_tables.cc | 7 |
3 files changed, 45 insertions, 0 deletions
diff --git a/mysql-test/r/cte_nonrecursive.result b/mysql-test/r/cte_nonrecursive.result index 8ad3818b453..746fcbcf051 100644 --- a/mysql-test/r/cte_nonrecursive.result +++ b/mysql-test/r/cte_nonrecursive.result @@ -1673,3 +1673,21 @@ with columns as (select 1 as t) select * from columns; t 1 use test; +# +# MDEV-18460: Server crashed in strmake / tdc_create_key / +# THD::create_tmp_table_def_key +# +connect con1,localhost,root,,; +CREATE TEMPORARY TABLE test.t (a INT); +WITH cte AS (SELECT 1) SELECT * FROM cte; +1 +1 +WITH t AS (SELECT 1) SELECT * FROM t; +1 +1 +WITH cte AS (SELECT 1) SELECT * FROM t; +ERROR 3D000: No database selected +DROP TABLE test.t; +connection default; +disconnect con1; +# End of 10.2 tests diff --git a/mysql-test/t/cte_nonrecursive.test b/mysql-test/t/cte_nonrecursive.test index bd8af55071a..41a5b815bc7 100644 --- a/mysql-test/t/cte_nonrecursive.test +++ b/mysql-test/t/cte_nonrecursive.test @@ -1182,3 +1182,23 @@ with t as (select 1 as t) select * from t; with columns as (select 1 as t) select * from columns; use test; + +--echo # +--echo # MDEV-18460: Server crashed in strmake / tdc_create_key / +--echo # THD::create_tmp_table_def_key +--echo # + +--connect con1,localhost,root,, +--change_user root,, + +CREATE TEMPORARY TABLE test.t (a INT); +WITH cte AS (SELECT 1) SELECT * FROM cte; +WITH t AS (SELECT 1) SELECT * FROM t; +--error ER_NO_DB_ERROR +WITH cte AS (SELECT 1) SELECT * FROM t; +DROP TABLE test.t; + +--connection default +--disconnect con1 + +--echo # End of 10.2 tests diff --git a/sql/temporary_tables.cc b/sql/temporary_tables.cc index b97e0334f0d..e2179a71625 100644 --- a/sql/temporary_tables.cc +++ b/sql/temporary_tables.cc @@ -338,6 +338,13 @@ bool THD::open_temporary_table(TABLE_LIST *tl) DBUG_RETURN(false); } + if (!tl->db) + { + DBUG_PRINT("info", + ("Table reference to a temporary table must have database set")); + DBUG_RETURN(false); + } + /* Temporary tables are not safe for parallel replication. They were designed to be visible to one thread only, so have no table locking. |