mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	 1fb4828b28
			
		
	
	
	1fb4828b28
	
	
	
		
			
			- MDEV-28342 raised the error in case temporary table shadows base table
- Now we are allowed to shadow base tables with temporary tables and
`sys.create_synonym_db()` can easily check for existance of temporary table and
ignore view creation, since it is not supported to create view from
temporary table.
Reviewed-by: <monty@mariadb.org>,
             <vicentiu@mariadb.org>
		
	
			
		
			
				
	
	
		
			97 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| CREATE TABLE t1 (t1_id int PRIMARY KEY, t1_val varchar(10));
 | |
| CREATE TABLE t2 (t2_id int PRIMARY KEY, t1_id int, t2_val int, INDEX (t1_id));
 | |
| CREATE TABLE `is` (t1_id int PRIMARY KEY, t1_val varchar(10));
 | |
| CREATE TABLE `ab``c` (t1_id int PRIMARY KEY, t1_val varchar(10));
 | |
| CREATE SQL SECURITY INVOKER VIEW myview AS SELECT * FROM t1 NATURAL JOIN t2;
 | |
| CALL sys.create_synonym_db('test', 'test1');
 | |
| summary
 | |
| Created 5 views in the `test1` database
 | |
| SELECT TABLE_NAME, SECURITY_TYPE FROM information_schema.VIEWS WHERE TABLE_SCHEMA = 'test1' ORDER BY TABLE_NAME;
 | |
| TABLE_NAME	SECURITY_TYPE
 | |
| ab`c	INVOKER
 | |
| is	INVOKER
 | |
| myview	INVOKER
 | |
| t1	INVOKER
 | |
| t2	INVOKER
 | |
| CALL sys.create_synonym_db('test', 'test1');
 | |
| ERROR HY000: Can't create database test1; database exists
 | |
| CREATE SCHEMA test2;
 | |
| CALL sys.create_synonym_db('test', 'test2');
 | |
| ERROR HY000: Can't create database test2; database exists
 | |
| SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test2';
 | |
| COUNT(*)
 | |
| 0
 | |
| CALL sys.create_synonym_db('test', 'is');
 | |
| summary
 | |
| Created 5 views in the `is` database
 | |
| SELECT TABLE_NAME, SECURITY_TYPE FROM information_schema.VIEWS WHERE TABLE_SCHEMA = 'is' ORDER BY TABLE_NAME;
 | |
| TABLE_NAME	SECURITY_TYPE
 | |
| ab`c	INVOKER
 | |
| is	INVOKER
 | |
| myview	INVOKER
 | |
| t1	INVOKER
 | |
| t2	INVOKER
 | |
| CALL sys.create_synonym_db('is', 'i`s');
 | |
| summary
 | |
| Created 5 views in the `i``s` database
 | |
| SELECT TABLE_NAME, SECURITY_TYPE FROM information_schema.VIEWS WHERE TABLE_SCHEMA = 'i`s' ORDER BY TABLE_NAME;
 | |
| TABLE_NAME	SECURITY_TYPE
 | |
| ab`c	INVOKER
 | |
| is	INVOKER
 | |
| myview	INVOKER
 | |
| t1	INVOKER
 | |
| t2	INVOKER
 | |
| DROP SCHEMA test1;
 | |
| DROP SCHEMA test2;
 | |
| DROP SCHEMA `is`;
 | |
| DROP SCHEMA `i``s`;
 | |
| DROP VIEW test.myview;
 | |
| DROP TABLE test.t1;
 | |
| DROP TABLE test.t2;
 | |
| DROP TABLE `is`;
 | |
| DROP TABLE `ab``c`;
 | |
| #
 | |
| # MDEV-28342: sys.create_synonym_db fails
 | |
| #             when a temporary table masks a base table
 | |
| #
 | |
| create database db;
 | |
| use db;
 | |
| create table a(a int);
 | |
| create table t (b int);
 | |
| create table b(a int);
 | |
| create temporary table b (a int);
 | |
| call sys.create_synonym_db('db','db_copy');
 | |
| summary
 | |
| Created 2 views in the `db_copy` database
 | |
| use db_copy;
 | |
| show tables;
 | |
| Tables_in_db_copy
 | |
| a
 | |
| t
 | |
| drop database db;
 | |
| drop database db_copy;
 | |
| # MDEV-28343: sys.create_synonym_db fails with ER_VIEW_SELECT_TMPTABLE
 | |
| #             when schema contains temporary tables
 | |
| #
 | |
| create database mytestdb;
 | |
| use mytestdb;
 | |
| create table t (b int);
 | |
| create temporary table tmp (a int);
 | |
| call sys.create_synonym_db('mytestdb','db_syn1');
 | |
| summary
 | |
| Created 1 view in the `db_syn1` database
 | |
| use db_syn1;
 | |
| show tables;
 | |
| Tables_in_db_syn1
 | |
| t
 | |
| drop database db_syn1;
 | |
| use mytestdb;
 | |
| create temporary table t (b int);
 | |
| call sys.create_synonym_db('mytestdb','db_syn1');
 | |
| summary
 | |
| Created 0 views in the `db_syn1` database
 | |
| use db_syn1;
 | |
| show tables;
 | |
| Tables_in_db_syn1
 | |
| drop database mytestdb;
 | |
| drop database db_syn1;
 |