mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			7130 lines
		
	
	
	
		
			221 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			7130 lines
		
	
	
	
		
			221 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| ALTER DATABASE test CHARACTER SET latin1 COLLATE latin1_swedish_ci;
 | ||
| SET optimizer_switch='outer_join_with_cache=off';
 | ||
| create view v1 (c,d) as select a,b from t1;
 | ||
| ERROR 42S02: Table 'test.t1' doesn't exist
 | ||
| create temporary table t1 (a int, b int);
 | ||
| create view v1 (c) as select b+1 from t1;
 | ||
| ERROR HY000: View's SELECT refers to a temporary table 't1'
 | ||
| drop table t1;
 | ||
| create table t1 (a int, b int);
 | ||
| insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
 | ||
| create view v1 (c,d) as select a,b+@@global.max_user_connections from t1;
 | ||
| ERROR HY000: View's SELECT contains a variable or parameter
 | ||
| create view v1 (c,d) as select a,b from t1
 | ||
| where a = @@global.max_user_connections;
 | ||
| ERROR HY000: View's SELECT contains a variable or parameter
 | ||
| create view v1 (c) as select b+1 from t1;
 | ||
| select c from v1;
 | ||
| c
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 11
 | ||
| select is_updatable from information_schema.views where table_name='v1';
 | ||
| is_updatable
 | ||
| NO
 | ||
| create temporary table t1 (a int, b int);
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| select c from v1;
 | ||
| c
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 11
 | ||
| show create table v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`b` + 1 AS `c` from `t1`	latin1	latin1_swedish_ci
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`b` + 1 AS `c` from `t1`	latin1	latin1_swedish_ci
 | ||
| show create view t1;
 | ||
| ERROR HY000: 'test.t1' is not of type 'VIEW'
 | ||
| drop table t1;
 | ||
| select a from v1;
 | ||
| ERROR 42S22: Unknown column 'a' in 'SELECT'
 | ||
| select v1.a from v1;
 | ||
| ERROR 42S22: Unknown column 'v1.a' in 'SELECT'
 | ||
| select b from v1;
 | ||
| ERROR 42S22: Unknown column 'b' in 'SELECT'
 | ||
| select v1.b from v1;
 | ||
| ERROR 42S22: Unknown column 'v1.b' in 'SELECT'
 | ||
| explain extended select c from v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`b` + 1 AS `c` from `test`.`t1`
 | ||
| create algorithm=temptable view v2 (c) as select b+1 from t1;
 | ||
| show create view v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`b` + 1 AS `c` from `t1`	latin1	latin1_swedish_ci
 | ||
| select c from v2;
 | ||
| c
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 11
 | ||
| explain extended select c from v2;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	<derived2>	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| 2	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	/* select#1 */ select `v2`.`c` AS `c` from `test`.`v2`
 | ||
| create view v3 (c) as select a+1 from v1;
 | ||
| ERROR 42S22: Unknown column 'a' in 'SELECT'
 | ||
| create view v3 (c) as select b+1 from v1;
 | ||
| ERROR 42S22: Unknown column 'b' in 'SELECT'
 | ||
| create view v3 (c) as select c+1 from v1;
 | ||
| select c from v3;
 | ||
| c
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 7
 | ||
| 12
 | ||
| explain extended select c from v3;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`b` + 1 + 1 AS `c` from `test`.`t1`
 | ||
| create algorithm=temptable view v4 (c) as select c+1 from v2;
 | ||
| select c from v4;
 | ||
| c
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 7
 | ||
| 12
 | ||
| explain extended select c from v4;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	<derived2>	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| 2	DERIVED	<derived3>	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| 3	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	/* select#1 */ select `v4`.`c` AS `c` from `test`.`v4`
 | ||
| create view v5 (c) as select c+1 from v2;
 | ||
| select c from v5;
 | ||
| c
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 7
 | ||
| 12
 | ||
| explain extended select c from v5;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	<derived3>	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| 3	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	/* select#1 */ select `v2`.`c` + 1 AS `c` from `test`.`v2`
 | ||
| create algorithm=temptable view v6 (c) as select c+1 from v1;
 | ||
| select c from v6;
 | ||
| c
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 7
 | ||
| 12
 | ||
| explain extended select c from v6;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	<derived2>	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| 2	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	5	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	/* select#1 */ select `v6`.`c` AS `c` from `test`.`v6`
 | ||
| show tables;
 | ||
| Tables_in_test
 | ||
| t1
 | ||
| v1
 | ||
| v2
 | ||
| v3
 | ||
| v4
 | ||
| v5
 | ||
| v6
 | ||
| show full tables;
 | ||
| Tables_in_test	Table_type
 | ||
| t1	BASE TABLE
 | ||
| v1	VIEW
 | ||
| v2	VIEW
 | ||
| v3	VIEW
 | ||
| v4	VIEW
 | ||
| v5	VIEW
 | ||
| v6	VIEW
 | ||
| show table status;
 | ||
| Name	Engine	Version	Row_format	Rows	Avg_row_length	Data_length	Max_data_length	Index_length	Data_free	Auto_increment	Create_time	Update_time	Check_time	Collation	Checksum	Create_options	Comment	Max_index_length	Temporary
 | ||
| t1	MyISAM	10	Fixed	5	9	45	#	1024	0	NULL	#	#	#	latin1_swedish_ci	NULL			#	N
 | ||
| v1	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	#	NULL	NULL	NULL	VIEW	#	NULL
 | ||
| v2	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	#	NULL	NULL	NULL	VIEW	#	NULL
 | ||
| v3	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	#	NULL	NULL	NULL	VIEW	#	NULL
 | ||
| v4	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	#	NULL	NULL	NULL	VIEW	#	NULL
 | ||
| v5	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	#	NULL	NULL	NULL	VIEW	#	NULL
 | ||
| v6	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	#	NULL	NULL	NULL	VIEW	#	NULL
 | ||
| drop view v1,v2,v3,v4,v5,v6;
 | ||
| create view v1 (c,d,e,f) as select a,b,
 | ||
| a in (select a+2 from t1), a = all (select a from t1) from t1;
 | ||
| create view v2 as select c, d from v1;
 | ||
| select * from v1;
 | ||
| c	d	e	f
 | ||
| 1	2	0	0
 | ||
| 1	3	0	0
 | ||
| 2	4	0	0
 | ||
| 2	5	0	0
 | ||
| 3	10	1	0
 | ||
| select * from v2;
 | ||
| c	d
 | ||
| 1	2
 | ||
| 1	3
 | ||
| 2	4
 | ||
| 2	5
 | ||
| 3	10
 | ||
| create view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
 | ||
| ERROR 42S01: Table 'v1' already exists
 | ||
| create or replace view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
 | ||
| drop view v2;
 | ||
| alter view v2 as select c, d from v1;
 | ||
| ERROR 42S02: Table 'test.v2' doesn't exist
 | ||
| create or replace view v2 as select c, d from v1;
 | ||
| alter view v1 (c,d) as select a,max(b) from t1 group by a;
 | ||
| select * from v1;
 | ||
| c	d
 | ||
| 1	3
 | ||
| 2	5
 | ||
| 3	10
 | ||
| select * from v2;
 | ||
| c	d
 | ||
| 1	3
 | ||
| 2	5
 | ||
| 3	10
 | ||
| drop view v100;
 | ||
| ERROR 42S02: Unknown VIEW: 'test.v100'
 | ||
| drop view t1;
 | ||
| ERROR 42S02: Unknown VIEW: 'test.t1'
 | ||
| drop table v1;
 | ||
| ERROR 42S02: 'test.v1' is a view
 | ||
| drop view v1,v2;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1), (2), (3);
 | ||
| create view v1 (a) as select a+1 from t1;
 | ||
| create view v2 (a) as select a-1 from t1;
 | ||
| select * from t1 natural left join v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| select * from v2 natural left join t1;
 | ||
| a
 | ||
| 0
 | ||
| 1
 | ||
| 2
 | ||
| select * from v2 natural left join v1;
 | ||
| a
 | ||
| 0
 | ||
| 1
 | ||
| 2
 | ||
| drop view v1, v2;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1), (2), (3), (1), (2), (3);
 | ||
| create view v1 as select distinct a from t1;
 | ||
| select * from v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| explain select * from v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	<derived2>	ALL	NULL	NULL	NULL	NULL	6	
 | ||
| 2	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	6	Using temporary
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select distinct a from t1 WITH CHECK OPTION;
 | ||
| ERROR HY000: CHECK OPTION on non-updatable view `test`.`v1`
 | ||
| create view v1 as select a from t1 WITH CHECK OPTION;
 | ||
| create view v2 as select a from t1 WITH CASCADED CHECK OPTION;
 | ||
| create view v3 as select a from t1 WITH LOCAL CHECK OPTION;
 | ||
| drop view v3 RESTRICT;
 | ||
| drop view v2 CASCADE;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int, b int);
 | ||
| insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
 | ||
| create view v1 (c) as select b+1 from t1;
 | ||
| select test.c from v1 test;
 | ||
| c
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 11
 | ||
| create algorithm=temptable view v2 (c) as select b+1 from t1;
 | ||
| select test.c from v2 test;
 | ||
| c
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 11
 | ||
| select test1.* from v1 test1, v2 test2 where test1.c=test2.c;
 | ||
| c
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 11
 | ||
| select test2.* from v1 test1, v2 test2 where test1.c=test2.c;
 | ||
| c
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| 6
 | ||
| 11
 | ||
| drop table t1;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1), (2), (3), (4);
 | ||
| create view v1 as select a+1 from t1 order by 1 desc limit 2;
 | ||
| select * from v1;
 | ||
| a+1
 | ||
| 5
 | ||
| 4
 | ||
| explain select * from v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	<derived2>	ALL	NULL	NULL	NULL	NULL	2	
 | ||
| 2	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	4	Using filesort
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1), (2), (3), (4);
 | ||
| create view v1 as select a+1 from t1;
 | ||
| create table t2 select * from v1;
 | ||
| show columns from t2;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| a+1	bigint(12)	YES		NULL	
 | ||
| select * from t2;
 | ||
| a+1
 | ||
| 2
 | ||
| 3
 | ||
| 4
 | ||
| 5
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| create table t1 (a int, b int, primary key(a));
 | ||
| insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
 | ||
| create view v1 (a,c) as select a, b+1 from t1;
 | ||
| create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
 | ||
| select is_updatable from information_schema.views where table_name='v2';
 | ||
| is_updatable
 | ||
| NO
 | ||
| select is_updatable from information_schema.views where table_name='v1';
 | ||
| is_updatable
 | ||
| YES
 | ||
| update v1 set c=a+c;
 | ||
| ERROR HY000: Column 'c' is not updatable
 | ||
| update v2 set a=a+c;
 | ||
| ERROR HY000: The target table v2 of the UPDATE is not updatable
 | ||
| update v1 set a=a+c;
 | ||
| select * from v1;
 | ||
| a	c
 | ||
| 13	3
 | ||
| 24	4
 | ||
| 35	5
 | ||
| 46	6
 | ||
| 61	11
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 13	2
 | ||
| 24	3
 | ||
| 35	4
 | ||
| 46	5
 | ||
| 61	10
 | ||
| drop table t1;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int, b int, primary key(a));
 | ||
| insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
 | ||
| create table t2 (x int);
 | ||
| insert into t2 values (10), (20);
 | ||
| create view v1 (a,c) as select a, b+1 from t1;
 | ||
| create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
 | ||
| update t2,v1 set v1.c=v1.a+v1.c where t2.x=v1.a;
 | ||
| ERROR HY000: Column 'c' is not updatable
 | ||
| update t2,v2 set v2.a=v2.v2.a+c where t2.x=v2.a;
 | ||
| ERROR HY000: The target table v2 of the UPDATE is not updatable
 | ||
| update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.a;
 | ||
| select * from v1;
 | ||
| a	c
 | ||
| 13	3
 | ||
| 24	4
 | ||
| 30	5
 | ||
| 40	6
 | ||
| 50	11
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 13	2
 | ||
| 24	3
 | ||
| 30	4
 | ||
| 40	5
 | ||
| 50	10
 | ||
| drop table t1,t2;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int, b int, primary key(b));
 | ||
| insert into t1 values (1,20), (2,30), (3,40), (4,50), (5,100);
 | ||
| create view v1 (c) as select b from t1 where a<3;
 | ||
| select * from v1;
 | ||
| c
 | ||
| 20
 | ||
| 30
 | ||
| explain extended select * from v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	5	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`b` AS `c` from `test`.`t1` where `test`.`t1`.`a` < 3
 | ||
| update v1 set c=c+1;
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 1	21
 | ||
| 2	31
 | ||
| 3	40
 | ||
| 4	50
 | ||
| 5	100
 | ||
| create view v2 (c) as select b from t1 where a>=3;
 | ||
| select * from v1, v2;
 | ||
| c	c
 | ||
| 21	40
 | ||
| 31	40
 | ||
| 21	50
 | ||
| 31	50
 | ||
| 21	100
 | ||
| 31	100
 | ||
| drop view v1, v2;
 | ||
| drop table t1;
 | ||
| create table t1 (a int, b int, primary key(a));
 | ||
| insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
 | ||
| create view v1 (a,c) as select a, b+1 from t1;
 | ||
| create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
 | ||
| delete from v2 where c < 4;
 | ||
| ERROR HY000: The target table v2 of the DELETE is not updatable
 | ||
| delete from v1 where c < 4;
 | ||
| select * from v1;
 | ||
| a	c
 | ||
| 2	4
 | ||
| 3	5
 | ||
| 4	6
 | ||
| 5	11
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 2	3
 | ||
| 3	4
 | ||
| 4	5
 | ||
| 5	10
 | ||
| drop table t1;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int, b int, primary key(a));
 | ||
| insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
 | ||
| create table t2 (x int);
 | ||
| insert into t2 values (1), (2), (3), (4);
 | ||
| create view v1 (a,c) as select a, b+1 from t1;
 | ||
| create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
 | ||
| delete v2 from t2,v2 where t2.x=v2.a;
 | ||
| ERROR HY000: The target table v2 of the DELETE is not updatable
 | ||
| delete v1 from t2,v1 where t2.x=v1.a;
 | ||
| select * from v1;
 | ||
| a	c
 | ||
| 5	11
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 5	10
 | ||
| drop table t1,t2;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int, b int, c int, primary key(a,b));
 | ||
| insert into t1 values (10,2,-1), (20,3,-2), (30,4,-3), (40,5,-4), (50,10,-5);
 | ||
| create view v1 (x,y) as select a, b from t1;
 | ||
| create view v2 (x,y) as select a, c from t1;
 | ||
| set updatable_views_with_limit=NO;
 | ||
| update v1 set x=x+1;
 | ||
| update v2 set x=x+1;
 | ||
| update v1 set x=x+1 limit 1;
 | ||
| update v2 set x=x+1 limit 1;
 | ||
| ERROR HY000: The target table v2 of the UPDATE is not updatable
 | ||
| set updatable_views_with_limit=YES;
 | ||
| update v1 set x=x+1 limit 1;
 | ||
| update v2 set x=x+1 limit 1;
 | ||
| Warnings:
 | ||
| Note	1355	View being updated does not have complete key of underlying table in it
 | ||
| set updatable_views_with_limit=DEFAULT;
 | ||
| show variables like "updatable_views_with_limit";
 | ||
| Variable_name	Value
 | ||
| updatable_views_with_limit	YES
 | ||
| select * from t1;
 | ||
| a	b	c
 | ||
| 15	2	-1
 | ||
| 22	3	-2
 | ||
| 32	4	-3
 | ||
| 42	5	-4
 | ||
| 52	10	-5
 | ||
| drop table t1;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int, b int, c int, primary key(a,b));
 | ||
| insert into t1 values (10,2,-1), (20,3,-2);
 | ||
| create view v1 (x,y,z) as select c, b, a from t1;
 | ||
| create view v2 (x,y) as select b, a from t1;
 | ||
| create view v3 (x,y,z) as select b, a, b from t1;
 | ||
| create view v4 (x,y,z) as select c+1, b, a from t1;
 | ||
| create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
 | ||
| insert into v3 values (-60,4,30);
 | ||
| ERROR HY000: The target table v3 of the INSERT is not insertable-into
 | ||
| insert into v4 values (-60,4,30);
 | ||
| ERROR HY000: The target table v4 of the INSERT is not insertable-into
 | ||
| insert into v5 values (-60,4,30);
 | ||
| ERROR HY000: The target table v5 of the INSERT is not insertable-into
 | ||
| insert into v1 values (-60,4,30);
 | ||
| insert into v1 (z,y,x) values (50,6,-100);
 | ||
| insert into v2 values (5,40);
 | ||
| select * from t1;
 | ||
| a	b	c
 | ||
| 10	2	-1
 | ||
| 20	3	-2
 | ||
| 30	4	-60
 | ||
| 50	6	-100
 | ||
| 40	5	NULL
 | ||
| drop table t1;
 | ||
| drop view v1,v2,v3,v4,v5;
 | ||
| create table t1 (a int, b int, c int, primary key(a,b));
 | ||
| insert into t1 values (10,2,-1), (20,3,-2);
 | ||
| create table t2 (a int, b int, c int, primary key(a,b));
 | ||
| insert into t2 values (30,4,-60);
 | ||
| create view v1 (x,y,z) as select c, b, a from t1;
 | ||
| create view v2 (x,y) as select b, a from t1;
 | ||
| create view v3 (x,y,z) as select b, a, b from t1;
 | ||
| create view v4 (x,y,z) as select c+1, b, a from t1;
 | ||
| create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
 | ||
| insert into v3 select c, b, a from t2;
 | ||
| ERROR HY000: The target table v3 of the INSERT is not insertable-into
 | ||
| insert into v4 select c, b, a from t2;
 | ||
| ERROR HY000: The target table v4 of the INSERT is not insertable-into
 | ||
| insert into v5 select c, b, a from t2;
 | ||
| ERROR HY000: The target table v5 of the INSERT is not insertable-into
 | ||
| insert into v1 select c, b, a from t2;
 | ||
| insert into v1 (z,y,x) select a+20,b+2,-100 from t2;
 | ||
| insert into v2 select b+1, a+10 from t2;
 | ||
| select * from t1;
 | ||
| a	b	c
 | ||
| 10	2	-1
 | ||
| 20	3	-2
 | ||
| 30	4	-60
 | ||
| 50	6	-100
 | ||
| 40	5	NULL
 | ||
| drop table t1, t2;
 | ||
| drop view v1,v2,v3,v4,v5;
 | ||
| create table t1 (a int, primary key(a));
 | ||
| insert into t1 values (1), (2), (3);
 | ||
| create view v1 (x) as select a from t1 where a > 1;
 | ||
| select t1.a, v1.x from t1 left join v1 on (t1.a= v1.x);
 | ||
| a	x
 | ||
| 1	NULL
 | ||
| 2	2
 | ||
| 3	3
 | ||
| drop table t1;
 | ||
| drop view v1;
 | ||
| create table t1 (a int, primary key(a));
 | ||
| insert into t1 values (1), (2), (3), (200);
 | ||
| create view v1 (x) as select a from t1 where a > 1;
 | ||
| create view v2 (y) as select x from v1 where x < 100;
 | ||
| select * from v2;
 | ||
| y
 | ||
| 2
 | ||
| 3
 | ||
| drop table t1;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int, primary key(a));
 | ||
| insert into t1 values (1), (2), (3), (200);
 | ||
| create ALGORITHM=TEMPTABLE view v1 (x) as select a from t1;
 | ||
| create view v2 (y) as select x from v1;
 | ||
| update v2 set y=10 where y=2;
 | ||
| ERROR HY000: The target table v2 of the UPDATE is not updatable
 | ||
| drop table t1;
 | ||
| drop view v1,v2;
 | ||
| create table t1 (a int not null auto_increment, b int not null, primary key(a), unique(b));
 | ||
| create view v1 (x) as select b from t1;
 | ||
| insert into v1 values (1);
 | ||
| select last_insert_id();
 | ||
| last_insert_id()
 | ||
| 0
 | ||
| insert into t1 (b) values (2);
 | ||
| select last_insert_id();
 | ||
| last_insert_id()
 | ||
| 2
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 1	1
 | ||
| 2	2
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| set sql_mode='ansi';
 | ||
| create table t1 ("a*b" int);
 | ||
| create view v1 as select "a*b" from t1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE VIEW "v1" AS select "t1"."a*b" AS "a*b" from "t1"	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| set sql_mode=default;
 | ||
| create table t1 (t_column int);
 | ||
| create view v1 as select 'a';
 | ||
| select * from v1, t1;
 | ||
| a	t_column
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table `t1a``b` (col1 char(2));
 | ||
| create view v1 as select * from `t1a``b`;
 | ||
| select * from v1;
 | ||
| col1
 | ||
| describe v1;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| col1	char(2)	YES		NULL	
 | ||
| drop view v1;
 | ||
| drop table `t1a``b`;
 | ||
| create table t1 (col1 char(5),col2 char(5));
 | ||
| create view v1 as select * from t1;
 | ||
| drop table t1;
 | ||
| create table t1 (col1 char(5),newcol2 char(5));
 | ||
| insert into v1 values('a','aa');
 | ||
| ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| drop table t1;
 | ||
| select * from v1;
 | ||
| ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| drop view v1;
 | ||
| create view v1 (a,a) as select 'a','a';
 | ||
| ERROR 42S21: Duplicate column name 'a'
 | ||
| create table t1 (col1 int,col2 char(22));
 | ||
| insert into t1 values(5,'Hello, world of views');
 | ||
| create view v1 as select * from t1;
 | ||
| create view v2 as select * from v1;
 | ||
| update v2 set col2='Hello, view world';
 | ||
| select is_updatable from information_schema.views where table_schema <> 'sys';
 | ||
| is_updatable
 | ||
| YES
 | ||
| YES
 | ||
| YES
 | ||
| select * from t1;
 | ||
| col1	col2
 | ||
| 5	Hello, view world
 | ||
| drop view v2, v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int, b int);
 | ||
| create view v1 as select a, sum(b) from t1 group by a;
 | ||
| select b from v1 use index (some_index) where b=1;
 | ||
| ERROR 42000: Key 'some_index' doesn't exist in table 'v1'
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (col1 char(5),col2 char(5));
 | ||
| create view v1 (col1,col2) as select col1,col2 from t1;
 | ||
| insert into v1 values('s1','p1'),('s1','p2'),('s1','p3'),('s1','p4'),('s2','p1'),('s3','p2'),('s4','p4');
 | ||
| select distinct first.col2 from t1 first where first.col2 in (select second.col2 from t1 second where second.col1<>first.col1);
 | ||
| col2
 | ||
| p1
 | ||
| p2
 | ||
| p4
 | ||
| select distinct first.col2 from v1 first where first.col2 in (select second.col2 from t1 second where second.col1<>first.col1);
 | ||
| col2
 | ||
| p1
 | ||
| p2
 | ||
| p4
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select a from t1;
 | ||
| insert into t1 values (1);
 | ||
| SET @v0 = '2';
 | ||
| PREPARE stmt FROM 'UPDATE v1 SET a = ?';
 | ||
| EXECUTE stmt USING @v0;
 | ||
| DEALLOCATE PREPARE stmt;
 | ||
| SET @v0 = '3';
 | ||
| PREPARE stmt FROM 'insert into v1 values (?)';
 | ||
| EXECUTE stmt USING @v0;
 | ||
| DEALLOCATE PREPARE stmt;
 | ||
| SET @v0 = '4';
 | ||
| PREPARE stmt FROM 'insert into v1 (a) values (?)';
 | ||
| EXECUTE stmt USING @v0;
 | ||
| DEALLOCATE PREPARE stmt;
 | ||
| select * from t1;
 | ||
| a
 | ||
| 2
 | ||
| 3
 | ||
| 4
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE VIEW v02 AS SELECT * FROM DUAL;
 | ||
| ERROR HY000: No tables used
 | ||
| SHOW TABLES;
 | ||
| Tables_in_test
 | ||
| CREATE VIEW v1 AS SELECT EXISTS (SELECT 1 UNION SELECT 2);
 | ||
| select * from v1;
 | ||
| EXISTS (SELECT 1 UNION SELECT 2)
 | ||
| 1
 | ||
| drop view v1;
 | ||
| create table t1 (col1 int,col2 char(22));
 | ||
| create view v1 as select * from t1;
 | ||
| create index i1 on v1 (col1);
 | ||
| ERROR HY000: 'test.v1' is not of type 'BASE TABLE'
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE VIEW v1 (f1,f2,f3,f4) AS SELECT connection_id(), pi(), current_user(), version();
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select connection_id() AS `f1`,pi() AS `f2`,current_user() AS `f3`,version() AS `f4`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| create table t1 (s1 int);
 | ||
| create table t2 (s2 int);
 | ||
| insert into t1 values (1), (2);
 | ||
| insert into t2 values (2), (3);
 | ||
| create view v1 as select * from t1,t2 union all select * from t1,t2;
 | ||
| select * from v1;
 | ||
| s1	s2
 | ||
| 1	2
 | ||
| 2	2
 | ||
| 1	3
 | ||
| 2	3
 | ||
| 1	2
 | ||
| 2	2
 | ||
| 1	3
 | ||
| 2	3
 | ||
| drop view v1;
 | ||
| drop tables t1, t2;
 | ||
| create table t1 (col1 int);
 | ||
| insert into t1 values (1);
 | ||
| create view v1 as select count(*) from t1;
 | ||
| insert into t1 values (null);
 | ||
| select * from v1;
 | ||
| count(*)
 | ||
| 2
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| create table t2 (a int);
 | ||
| create view v1 as select a from t1;
 | ||
| create view v2 as select a from t2 where a in (select a from v1);
 | ||
| show create view v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where `t2`.`a` in (select `v1`.`a` from `v1`)	latin1	latin1_swedish_ci
 | ||
| drop view v2, v1;
 | ||
| drop table t1, t2;
 | ||
| CREATE VIEW `v 1` AS select 5 AS `5`;
 | ||
| show create view `v 1`;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v 1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v 1` AS select 5 AS `5`	latin1	latin1_swedish_ci
 | ||
| drop view `v 1`;
 | ||
| create database mysqltest;
 | ||
| create table mysqltest.t1 (a int, b int);
 | ||
| create view mysqltest.v1 as select a from mysqltest.t1;
 | ||
| alter view mysqltest.v1 as select b from mysqltest.t1;
 | ||
| alter view mysqltest.v1 as select a from mysqltest.t1;
 | ||
| drop database mysqltest;
 | ||
| CREATE TABLE t1 (c1 int not null auto_increment primary key, c2 varchar(20), fulltext(c2));
 | ||
| insert into t1 (c2) VALUES ('real Beer'),('Water'),('Kossu'),('Coca-Cola'),('Vodka'),('Wine'),('almost real Beer');
 | ||
| select * from t1 WHERE match (c2) against ('Beer');
 | ||
| c1	c2
 | ||
| 1	real Beer
 | ||
| 7	almost real Beer
 | ||
| CREATE VIEW v1 AS SELECT  * from t1 WHERE match (c2) against ('Beer');
 | ||
| select * from v1;
 | ||
| c1	c2
 | ||
| 1	real Beer
 | ||
| 7	almost real Beer
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1),(1),(2),(2),(3),(3);
 | ||
| create view v1 as select a from t1;
 | ||
| select distinct a from v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| select distinct a from v1 limit 2;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| select distinct a from t1 limit 2;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| prepare stmt1 from "select distinct a from v1 limit 2";
 | ||
| execute stmt1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| execute stmt1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| deallocate prepare stmt1;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (tg_column bigint);
 | ||
| create view v1 as select count(tg_column) as vg_column from t1;
 | ||
| select avg(vg_column) from v1;
 | ||
| avg(vg_column)
 | ||
| 0.0000
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (col1 bigint not null, primary key (col1));
 | ||
| create table t2 (col1 bigint not null, key (col1));
 | ||
| create view v1 as select * from t1;
 | ||
| create view v2 as select * from t2;
 | ||
| insert into v1 values (1);
 | ||
| insert into v2 values (1);
 | ||
| create view v3 (a,b) as select v1.col1 as a, v2.col1 as b from v1, v2 where v1.col1 = v2.col1;
 | ||
| select * from v3;
 | ||
| a	b
 | ||
| 1	1
 | ||
| show create view v3;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `v1`.`col1` AS `a`,`v2`.`col1` AS `b` from (`v1` join `v2`) where `v1`.`col1` = `v2`.`col1`	latin1	latin1_swedish_ci
 | ||
| drop view v3, v2, v1;
 | ||
| drop table t2, t1;
 | ||
| create function `f``1` () returns int return 5;
 | ||
| create view v1 as select test.`f``1` ();
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`f``1`() AS `test.``f````1`` ()`	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| test.`f``1` ()
 | ||
| 5
 | ||
| drop view v1;
 | ||
| drop function `f``1`;
 | ||
| create function a() returns int return 5;
 | ||
| create view v1 as select a();
 | ||
| select * from v1;
 | ||
| a()
 | ||
| 5
 | ||
| drop view v1;
 | ||
| drop function a;
 | ||
| create table t2 (col1 char collate latin1_german2_ci);
 | ||
| create view v2 as select col1 collate latin1_german1_ci from t2;
 | ||
| show create view v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`col1` collate latin1_german1_ci AS `col1 collate latin1_german1_ci` from `t2`	latin1	latin1_swedish_ci
 | ||
| show create view v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`col1` collate latin1_german1_ci AS `col1 collate latin1_german1_ci` from `t2`	latin1	latin1_swedish_ci
 | ||
| drop view v2;
 | ||
| drop table t2;
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1), (2);
 | ||
| create view v1 as select 5 from t1 order by 1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 5 AS `5` from `t1` order by 1	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| 5
 | ||
| 5
 | ||
| 5
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create function x1 () returns int return 5;
 | ||
| create table t1 (s1 int);
 | ||
| create view v1 as select x1() from t1;
 | ||
| drop function x1;
 | ||
| select * from v1;
 | ||
| ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| show table status;
 | ||
| Name	Engine	Version	Row_format	Rows	Avg_row_length	Data_length	Max_data_length	Index_length	Data_free	Auto_increment	Create_time	Update_time	Check_time	Collation	Checksum	Create_options	Comment	Max_index_length	Temporary
 | ||
| t1	MyISAM	10	Fixed	0	0	0	#	1024	0	NULL	#	#	NULL	latin1_swedish_ci	NULL			#	N
 | ||
| v1	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	NULL	NULL	NULL	NULL	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them	#	NULL
 | ||
| Warnings:
 | ||
| Warning	1356	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a varchar(20));
 | ||
| create view v1 as select a from t1;
 | ||
| alter table t1 change a aa int;
 | ||
| select * from v1;
 | ||
| ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| show table status;
 | ||
| Name	Engine	Version	Row_format	Rows	Avg_row_length	Data_length	Max_data_length	Index_length	Data_free	Auto_increment	Create_time	Update_time	Check_time	Collation	Checksum	Create_options	Comment	Max_index_length	Temporary
 | ||
| t1	MyISAM	10	Fixed	0	0	0	#	1024	0	NULL	#	#	NULL	latin1_swedish_ci	NULL			#	N
 | ||
| v1	NULL	NULL	NULL	NULL	NULL	NULL	#	NULL	NULL	NULL	#	#	NULL	NULL	NULL	NULL	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them	#	NULL
 | ||
| Warnings:
 | ||
| Warning	1356	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`a` AS `a` from `t1`	latin1	latin1_swedish_ci
 | ||
| Warnings:
 | ||
| Warning	1356	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create view v1 as select 99999999999999999999999999999999999999999999999999999 as col1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 99999999999999999999999999999999999999999999999999999 AS `col1`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| SET @old_cs_client = @@character_set_client;
 | ||
| SET @old_cs_results = @@character_set_results;
 | ||
| SET @old_cs_connection = @@character_set_connection;
 | ||
| set names utf8;
 | ||
| create table tü (cü char);
 | ||
| create view vü as select cü from tü;
 | ||
| insert into vü values ('ü');
 | ||
| select * from vü;
 | ||
| cü
 | ||
| ü
 | ||
| drop view vü;
 | ||
| drop table tü;
 | ||
| SET character_set_client = @old_cs_client;
 | ||
| SET character_set_results = @old_cs_results;
 | ||
| SET character_set_connection = @old_cs_connection;
 | ||
| create table t1 (a int, b int);
 | ||
| insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
 | ||
| create view v1(c) as select a+1 from t1 where b >= 4;
 | ||
| select c from v1 where exists (select * from t1 where a=2 and b=c);
 | ||
| c
 | ||
| 4
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create view v1 as select cast(1 as char(3));
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(1 as char(3) charset latin1) AS `cast(1 as char(3))`	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| cast(1 as char(3))
 | ||
| 1
 | ||
| drop view v1;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select a from t1;
 | ||
| create view v3 as select a from t1;
 | ||
| create database mysqltest;
 | ||
| rename table v1 to mysqltest.v1;
 | ||
| ERROR HY000: Changing schema from 'test' to 'mysqltest' is not allowed
 | ||
| rename table v1 to v2;
 | ||
| rename table v3 to v1, v2 to t1;
 | ||
| ERROR 42S01: Table 't1' already exists
 | ||
| drop table t1;
 | ||
| drop view v2,v3;
 | ||
| drop database mysqltest;
 | ||
| create view v1 as select 'a',1;
 | ||
| create view v2 as select * from v1 union all select * from v1;
 | ||
| create view v3 as select * from v2 where 1 = (select `1` from v2);
 | ||
| create view v4 as select * from v3;
 | ||
| select * from v4;
 | ||
| ERROR 21000: Subquery returns more than 1 row
 | ||
| drop view v4, v3, v2, v1;
 | ||
| create view v1 as select 5 into @w;
 | ||
| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'into @w' at line 1
 | ||
| create view v1 as select 5 into outfile 'ttt';
 | ||
| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'into outfile 'ttt'' at line 1
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select a from t1 procedure analyse();
 | ||
| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'procedure analyse()' at line 1
 | ||
| create view v1 as select 1 from (select 1) as d1;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 int, primary key (s1));
 | ||
| create view v1 as select * from t1;
 | ||
| insert into v1 values (1) on duplicate key update s1 = 7;
 | ||
| insert into v1 values (1) on duplicate key update s1 = 7;
 | ||
| select * from t1;
 | ||
| s1
 | ||
| 7
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (col1 int);
 | ||
| create table t2 (col1 int);
 | ||
| create table t3 (col1 datetime not null);
 | ||
| create view v1 as select * from t1;
 | ||
| create view v2 as select * from v1;
 | ||
| create view v3 as select v2.col1 from v2,t2 where v2.col1 = t2.col1;
 | ||
| insert into v2 values ((select max(col1) from v1));
 | ||
| ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 'v2'
 | ||
| insert into t1 values ((select max(col1) from v1));
 | ||
| ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 't1'
 | ||
| insert into v2 values ((select max(col1) from v1));
 | ||
| ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 'v2'
 | ||
| insert into v2 values ((select max(col1) from t1));
 | ||
| ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v2'
 | ||
| insert into t1 values ((select max(col1) from t1));
 | ||
| ERROR HY000: Table 't1' is specified twice, both as a target for 'INSERT' and as a separate source for data
 | ||
| insert into v2 values ((select max(col1) from t1));
 | ||
| ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v2'
 | ||
| insert into v2 values ((select max(col1) from v2));
 | ||
| ERROR HY000: Table 'v2' is specified twice, both as a target for 'INSERT' and as a separate source for data
 | ||
| insert into t1 values ((select max(col1) from v2));
 | ||
| ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 't1'
 | ||
| insert into v2 values ((select max(col1) from v2));
 | ||
| ERROR HY000: Table 'v2' is specified twice, both as a target for 'INSERT' and as a separate source for data
 | ||
| insert into v3 (col1) values ((select max(col1) from v1));
 | ||
| ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 'v3'
 | ||
| insert into v3 (col1) values ((select max(col1) from t1));
 | ||
| ERROR HY000: The definition of table 'v3' prevents operation INSERT on table 'v3'
 | ||
| insert into v3 (col1) values ((select max(col1) from v2));
 | ||
| ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v3'
 | ||
| insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from v2));
 | ||
| ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v3'
 | ||
| insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from t2));
 | ||
| insert into t3 values ((select CONVERT_TZ('20050101000000','UTC','MET') from t2));
 | ||
| ERROR 23000: Column 'col1' cannot be null
 | ||
| create algorithm=temptable view v4 as select * from t1;
 | ||
| insert into t1 values (1),(2),(3);
 | ||
| insert into t1 (col1) values ((select max(col1) from v4));
 | ||
| select * from t1;
 | ||
| col1
 | ||
| NULL
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| 3
 | ||
| drop view v4,v3,v2,v1;
 | ||
| drop table t1,t2,t3;
 | ||
| create table t1 (s1 int);
 | ||
| create view v1 as select * from t1;
 | ||
| handler v1 open as xx;
 | ||
| ERROR HY000: 'test.v1' is not of type 'BASE TABLE'
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1(a int);
 | ||
| insert into t1 values (0), (1), (2), (3);
 | ||
| create table t2 (a int);
 | ||
| insert into t2 select a from t1 where a > 1;
 | ||
| create view v1 as select a from t1 where a > 1;
 | ||
| select * from t1 left join (t2 as t, v1) on v1.a=t1.a;
 | ||
| a	a	a
 | ||
| 0	NULL	NULL
 | ||
| 1	NULL	NULL
 | ||
| 2	2	2
 | ||
| 2	3	2
 | ||
| 3	2	3
 | ||
| 3	3	3
 | ||
| select * from t1 left join (t2 as t, t2) on t2.a=t1.a;
 | ||
| a	a	a
 | ||
| 0	NULL	NULL
 | ||
| 1	NULL	NULL
 | ||
| 2	2	2
 | ||
| 2	3	2
 | ||
| 3	2	3
 | ||
| 3	3	3
 | ||
| drop view v1;
 | ||
| drop table t1, t2;
 | ||
| create table t1 (s1 char);
 | ||
| create view v1 as select s1 collate latin1_german1_ci as s1 from t1;
 | ||
| insert into v1 values ('a');
 | ||
| select * from v1;
 | ||
| s1
 | ||
| a
 | ||
| update v1 set s1='b';
 | ||
| select * from v1;
 | ||
| s1
 | ||
| b
 | ||
| update v1,t1 set v1.s1='c' where t1.s1=v1.s1;
 | ||
| select * from v1;
 | ||
| s1
 | ||
| c
 | ||
| prepare stmt1 from "update v1,t1 set v1.s1=? where t1.s1=v1.s1";
 | ||
| set @arg='d';
 | ||
| execute stmt1 using @arg;
 | ||
| select * from v1;
 | ||
| s1
 | ||
| d
 | ||
| set @arg='e';
 | ||
| execute stmt1 using @arg;
 | ||
| select * from v1;
 | ||
| s1
 | ||
| e
 | ||
| deallocate prepare stmt1;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| create table t2 (a int);
 | ||
| create view v1 as select * from t1;
 | ||
| lock tables t1 read, v1 read;
 | ||
| select * from v1;
 | ||
| a
 | ||
| select * from t2;
 | ||
| ERROR HY000: Table 't2' was not locked with LOCK TABLES
 | ||
| unlock tables;
 | ||
| drop view v1;
 | ||
| drop table t1, t2;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select * from t1 where a < 2 with check option;
 | ||
| insert into v1 values(1);
 | ||
| insert into v1 values(3);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| insert ignore into v1 values (2),(3),(0);
 | ||
| Warnings:
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| 0
 | ||
| delete from t1;
 | ||
| insert into v1 SELECT 1;
 | ||
| insert into v1 SELECT 3;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| create table t2 (a int);
 | ||
| insert into t2 values (2),(3),(0);
 | ||
| insert ignore into v1 SELECT a from t2;
 | ||
| Warnings:
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1 order by a desc;
 | ||
| a
 | ||
| 1
 | ||
| 0
 | ||
| update v1 set a=-1 where a=0;
 | ||
| update v1 set a=2 where a=1;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1 order by a desc;
 | ||
| a
 | ||
| 1
 | ||
| -1
 | ||
| update v1 set a=0 where a=0;
 | ||
| insert into t2 values (1);
 | ||
| update v1,t2 set v1.a=v1.a-1 where v1.a=t2.a;
 | ||
| select * from t1 order by a desc;
 | ||
| a
 | ||
| 0
 | ||
| -1
 | ||
| update v1 set a=a+1;
 | ||
| update ignore v1,t2 set v1.a=v1.a+1 where v1.a=t2.a;
 | ||
| Warnings:
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| 1
 | ||
| drop view v1;
 | ||
| drop table t1, t2;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select * from t1 where a < 2 with check option;
 | ||
| create view v2 as select * from v1 where a > 0 with local check option;
 | ||
| create view v3 as select * from v1 where a > 0 with cascaded check option;
 | ||
| insert into v2 values (1);
 | ||
| insert into v3 values (1);
 | ||
| insert into v2 values (0);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| insert into v3 values (0);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v3`
 | ||
| insert into v2 values (2);
 | ||
| insert into v3 values (2);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v3`
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| 1
 | ||
| 2
 | ||
| drop view v3,v2,v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int, primary key (a));
 | ||
| create view v1 as select * from t1 where a < 2 with check option;
 | ||
| insert into v1 values (1) on duplicate key update a=2;
 | ||
| insert into v1 values (1) on duplicate key update a=2;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| insert ignore into v1 values (1) on duplicate key update a=2;
 | ||
| Warnings:
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 int);
 | ||
| create view v1 as select * from t1;
 | ||
| create view v2 as select * from v1;
 | ||
| alter view v1 as select * from v2;
 | ||
| ERROR 42S02: Table 'test.v1' doesn't exist
 | ||
| alter view v1 as select * from v1;
 | ||
| ERROR 42S02: Table 'test.v1' doesn't exist
 | ||
| create or replace view v1 as select * from v2;
 | ||
| ERROR 42S02: Table 'test.v1' doesn't exist
 | ||
| create or replace view v1 as select * from v1;
 | ||
| ERROR 42S02: Table 'test.v1' doesn't exist
 | ||
| drop view v2,v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select * from t1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1`	latin1	latin1_swedish_ci
 | ||
| alter algorithm=undefined view v1 as select * from t1 with check option;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` WITH CASCADED CHECK OPTION	latin1	latin1_swedish_ci
 | ||
| alter algorithm=merge view v1 as select * from t1 with cascaded check option;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` WITH CASCADED CHECK OPTION	latin1	latin1_swedish_ci
 | ||
| alter algorithm=temptable view v1 as select * from t1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 int);
 | ||
| create table t2 (s1 int);
 | ||
| create view v2 as select * from t2 where s1 in (select s1 from t1);
 | ||
| insert into v2 values (5);
 | ||
| insert into t1 values (5);
 | ||
| select * from v2;
 | ||
| s1
 | ||
| 5
 | ||
| update v2 set s1 = 0;
 | ||
| select * from v2;
 | ||
| s1
 | ||
| select * from t2;
 | ||
| s1
 | ||
| 0
 | ||
| alter view v2 as select * from t2 where s1 in (select s1 from t1) with check option;
 | ||
| insert into v2 values (5);
 | ||
| update v2 set s1 = 1;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| insert into t1 values (1);
 | ||
| update v2 set s1 = 1;
 | ||
| select * from v2;
 | ||
| s1
 | ||
| 1
 | ||
| select * from t2;
 | ||
| s1
 | ||
| 0
 | ||
| 1
 | ||
| prepare stmt1 from "select * from v2;";
 | ||
| execute stmt1;
 | ||
| s1
 | ||
| 1
 | ||
| insert into t1 values (0);
 | ||
| execute stmt1;
 | ||
| s1
 | ||
| 0
 | ||
| 1
 | ||
| deallocate prepare stmt1;
 | ||
| drop view v2;
 | ||
| drop table t1, t2;
 | ||
| create table t1 (t time);
 | ||
| create view v1 as select substring_index(t,':',2) as t from t1;
 | ||
| insert into t1 (t) values ('12:24:10');
 | ||
| select substring_index(t,':',2) from t1;
 | ||
| substring_index(t,':',2)
 | ||
| 12:24
 | ||
| select substring_index(t,':',2) from v1;
 | ||
| substring_index(t,':',2)
 | ||
| 12:24
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 tinyint);
 | ||
| create view v1 as select * from t1 where s1 <> 0 with local check option;
 | ||
| create view v2 as select * from v1 with cascaded check option;
 | ||
| insert into v2 values (0);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| drop view v2, v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 int);
 | ||
| create view v1 as select * from t1 where s1 < 5 with check option;
 | ||
| insert ignore into v1 values (6);
 | ||
| Warnings:
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| SHOW WARNINGS;
 | ||
| Level	Code	Message
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| insert ignore into v1 values (6),(3);
 | ||
| Warnings:
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| SHOW WARNINGS;
 | ||
| Level	Code	Message
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1;
 | ||
| s1
 | ||
| 3
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
 | ||
| create table t1 (s1 tinyint);
 | ||
| create trigger t1_bi before insert on t1 for each row set new.s1 = 500;
 | ||
| create view v1 as select * from t1 where s1 <> 127 with check option;
 | ||
| insert into v1 values (0);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| select * from v1;
 | ||
| s1
 | ||
| select * from t1;
 | ||
| s1
 | ||
| drop trigger t1_bi;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| SET sql_mode = default;
 | ||
| create table t1 (s1 tinyint);
 | ||
| create view v1 as select * from t1 where s1 <> 0;
 | ||
| create view v2 as select * from v1 where s1 <> 1 with cascaded check option;
 | ||
| insert into v2 values (0);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| select * from v2;
 | ||
| s1
 | ||
| select * from t1;
 | ||
| s1
 | ||
| drop view v2, v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int, b char(10));
 | ||
| create view v1 as select * from t1 where a != 0 with check option;
 | ||
| load data infile '../../std_data/loaddata3.dat' into table v1 fields terminated by '' enclosed by '' ignore 1 lines;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 1	row 1
 | ||
| 2	row 2
 | ||
| select * from v1;
 | ||
| a	b
 | ||
| 1	row 1
 | ||
| 2	row 2
 | ||
| delete from t1;
 | ||
| load data infile '../../std_data/loaddata3.dat' ignore into table v1 fields terminated by '' enclosed by '' ignore 1 lines;
 | ||
| Warnings:
 | ||
| Note	1265	Data truncated for column 'a' at row 1
 | ||
| Note	1265	Data truncated for column 'a' at row 2
 | ||
| Warning	1366	Incorrect integer value: 'error      ' for column `test`.`t1`.`a` at row 3
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| Note	1265	Data truncated for column 'a' at row 3
 | ||
| Warning	1366	Incorrect integer value: 'wrong end  ' for column `test`.`t1`.`a` at row 4
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| select * from t1 order by a,b;
 | ||
| a	b
 | ||
| 1	row 1
 | ||
| 2	row 2
 | ||
| 3	row 3
 | ||
| select * from v1 order by a,b;
 | ||
| a	b
 | ||
| 1	row 1
 | ||
| 2	row 2
 | ||
| 3	row 3
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a text, b text);
 | ||
| create view v1 as select * from t1 where a <> 'Field A' with check option;
 | ||
| load data infile '../../std_data/loaddata2.dat' into table v1 fields terminated by ',' enclosed by '''';
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| select concat('|',a,'|'), concat('|',b,'|') from t1;
 | ||
| concat('|',a,'|')	concat('|',b,'|')
 | ||
| select concat('|',a,'|'), concat('|',b,'|') from v1;
 | ||
| concat('|',a,'|')	concat('|',b,'|')
 | ||
| delete from t1;
 | ||
| load data infile '../../std_data/loaddata2.dat' ignore into table v1 fields terminated by ',' enclosed by '''';
 | ||
| Warnings:
 | ||
| Warning	1369	CHECK OPTION failed `test`.`v1`
 | ||
| Warning	1261	Row 2 doesn't contain data for all columns
 | ||
| select concat('|',a,'|'), concat('|',b,'|') from t1;
 | ||
| concat('|',a,'|')	concat('|',b,'|')
 | ||
| |Field 1|	|Field 2' 
 | ||
| Field 3,'Field 4|
 | ||
| |Field 5' ,'Field 6|	NULL
 | ||
| |Field 6|	| 'Field 7'|
 | ||
| select concat('|',a,'|'), concat('|',b,'|') from v1;
 | ||
| concat('|',a,'|')	concat('|',b,'|')
 | ||
| |Field 1|	|Field 2' 
 | ||
| Field 3,'Field 4|
 | ||
| |Field 5' ,'Field 6|	NULL
 | ||
| |Field 6|	| 'Field 7'|
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 smallint);
 | ||
| create view v1 as select * from t1 where 20 < (select (s1) from t1);
 | ||
| insert into v1 values (30);
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| create view v2 as select * from t1;
 | ||
| create view v3 as select * from t1 where 20 < (select (s1) from v2);
 | ||
| insert into v3 values (30);
 | ||
| ERROR HY000: The target table v3 of the INSERT is not insertable-into
 | ||
| create view v4 as select * from v2 where 20 < (select (s1) from t1);
 | ||
| insert into v4 values (30);
 | ||
| ERROR HY000: The target table v4 of the INSERT is not insertable-into
 | ||
| drop view v4, v3, v2, v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select * from t1;
 | ||
| check table t1,v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.t1	check	status	OK
 | ||
| test.v1	check	status	OK
 | ||
| check table v1,t1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	check	status	OK
 | ||
| test.t1	check	status	OK
 | ||
| drop table t1;
 | ||
| check table v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	check	Error	Table 'test.t1' doesn't exist
 | ||
| test.v1	check	Error	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| test.v1	check	error	Corrupt
 | ||
| drop view v1;
 | ||
| create table t1 (a int);
 | ||
| create table t2 (a int);
 | ||
| create table t3 (a int);
 | ||
| insert into t1 values (1), (2), (3);
 | ||
| insert into t2 values (1), (3);
 | ||
| insert into t3 values (1), (2), (4);
 | ||
| create view v3 (a,b) as select t1.a as a, t2.a as b from t1 left join t2 on (t1.a=t2.a);
 | ||
| select * from t3 left join v3 on (t3.a = v3.a);
 | ||
| a	a	b
 | ||
| 1	1	1
 | ||
| 2	2	NULL
 | ||
| 4	NULL	NULL
 | ||
| explain extended select * from t3 left join v3 on (t3.a = v3.a);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t3	ALL	NULL	NULL	NULL	NULL	3	100.00	
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	3	100.00	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join `test`.`t2` on(`test`.`t2`.`a` = `test`.`t3`.`a`)) on(`test`.`t1`.`a` = `test`.`t3`.`a`) where 1
 | ||
| create view v1 (a) as select a from t1;
 | ||
| create view v2 (a) as select a from t2;
 | ||
| create view v4 (a,b) as select v1.a as a, v2.a as b from v1 left join v2 on (v1.a=v2.a);
 | ||
| select * from t3 left join v4 on (t3.a = v4.a);
 | ||
| a	a	b
 | ||
| 1	1	1
 | ||
| 2	2	NULL
 | ||
| 4	NULL	NULL
 | ||
| explain extended select * from t3 left join v4 on (t3.a = v4.a);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t3	ALL	NULL	NULL	NULL	NULL	3	100.00	
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	3	100.00	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join (`test`.`t2`) on(`test`.`t2`.`a` = `test`.`t3`.`a`)) on(`test`.`t1`.`a` = `test`.`t3`.`a`) where 1
 | ||
| prepare stmt1 from "select * from t3 left join v4 on (t3.a = v4.a);";
 | ||
| execute stmt1;
 | ||
| a	a	b
 | ||
| 1	1	1
 | ||
| 2	2	NULL
 | ||
| 4	NULL	NULL
 | ||
| execute stmt1;
 | ||
| a	a	b
 | ||
| 1	1	1
 | ||
| 2	2	NULL
 | ||
| 4	NULL	NULL
 | ||
| deallocate prepare stmt1;
 | ||
| drop view v4,v3,v2,v1;
 | ||
| drop tables t1,t2,t3;
 | ||
| create table t1 (a int, primary key (a), b int);
 | ||
| create table t2 (a int, primary key (a));
 | ||
| insert into t1 values (1,100), (2,200);
 | ||
| insert into t2 values (1), (3);
 | ||
| create view v3 (a,b) as select t1.a as a, t2.a as b from t1, t2;
 | ||
| update v3 set a= 10 where a=1;
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 10	100
 | ||
| 2	200
 | ||
| select * from t2;
 | ||
| a
 | ||
| 1
 | ||
| 3
 | ||
| create view v2 (a,b) as select t1.b as a, t2.a as b from t1, t2;
 | ||
| set updatable_views_with_limit=NO;
 | ||
| update v2 set a= 10 where a=200 limit 1;
 | ||
| ERROR HY000: The target table v2 of the UPDATE is not updatable
 | ||
| set updatable_views_with_limit=DEFAULT;
 | ||
| select * from v3;
 | ||
| a	b
 | ||
| 2	1
 | ||
| 10	1
 | ||
| 2	3
 | ||
| 10	3
 | ||
| select * from v2;
 | ||
| a	b
 | ||
| 100	1
 | ||
| 200	1
 | ||
| 100	3
 | ||
| 200	3
 | ||
| set @a= 10;
 | ||
| set @b= 100;
 | ||
| prepare stmt1 from "update v3 set a= ? where a=?";
 | ||
| execute stmt1 using @a,@b;
 | ||
| select * from v3;
 | ||
| a	b
 | ||
| 2	1
 | ||
| 10	1
 | ||
| 2	3
 | ||
| 10	3
 | ||
| set @a= 300;
 | ||
| set @b= 10;
 | ||
| execute stmt1 using @a,@b;
 | ||
| select * from v3;
 | ||
| a	b
 | ||
| 2	1
 | ||
| 300	1
 | ||
| 2	3
 | ||
| 300	3
 | ||
| deallocate prepare stmt1;
 | ||
| drop view v3,v2;
 | ||
| drop tables t1,t2;
 | ||
| create table t1 (a int, primary key (a), b int);
 | ||
| create table t2 (a int, primary key (a), b int);
 | ||
| insert into t2 values (1000, 2000);
 | ||
| create view v3 (a,b) as select t1.a as a, t2.a as b from t1, t2;
 | ||
| insert into v3 values (1,2);
 | ||
| ERROR HY000: Can not insert into join view 'test.v3' without fields list
 | ||
| insert into v3 select * from t2;
 | ||
| ERROR HY000: Can not insert into join view 'test.v3' without fields list
 | ||
| insert into v3(a,b) values (1,2);
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v3'
 | ||
| insert into v3(a,b) select * from t2;
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v3'
 | ||
| insert into v3(a) values (1);
 | ||
| insert into v3(b) values (10);
 | ||
| insert into v3(a) select a from t2;
 | ||
| insert into v3(b) select b from t2;
 | ||
| Warnings:
 | ||
| Warning	1048	Column 'a' cannot be null
 | ||
| insert into v3(a) values (1) on duplicate key update a=a+10000+VALUES(a);
 | ||
| select * from t1;
 | ||
| a	b
 | ||
| 10002	NULL
 | ||
| 10	NULL
 | ||
| 1000	NULL
 | ||
| select * from t2;
 | ||
| a	b
 | ||
| 1000	2000
 | ||
| 10	NULL
 | ||
| 2000	NULL
 | ||
| 0	NULL
 | ||
| delete from v3;
 | ||
| ERROR HY000: Can not delete from join view 'test.v3'
 | ||
| delete v3,t1 from v3,t1;
 | ||
| ERROR HY000: Can not delete from join view 'test.v3'
 | ||
| delete t1,v3 from t1,v3;
 | ||
| ERROR HY000: Can not delete from join view 'test.v3'
 | ||
| delete from t1;
 | ||
| prepare stmt1 from "insert into v3(a) values (?);";
 | ||
| set @a= 100;
 | ||
| execute stmt1 using @a;
 | ||
| set @a= 300;
 | ||
| execute stmt1 using @a;
 | ||
| deallocate prepare stmt1;
 | ||
| prepare stmt1 from "insert into v3(a) select ?;";
 | ||
| set @a= 101;
 | ||
| execute stmt1 using @a;
 | ||
| set @a= 301;
 | ||
| execute stmt1 using @a;
 | ||
| deallocate prepare stmt1;
 | ||
| select * from v3;
 | ||
| a	b
 | ||
| 100	0
 | ||
| 100	10
 | ||
| 100	1000
 | ||
| 100	2000
 | ||
| 101	0
 | ||
| 101	10
 | ||
| 101	1000
 | ||
| 101	2000
 | ||
| 300	0
 | ||
| 300	10
 | ||
| 300	1000
 | ||
| 300	2000
 | ||
| 301	0
 | ||
| 301	10
 | ||
| 301	1000
 | ||
| 301	2000
 | ||
| drop view v3;
 | ||
| drop tables t1,t2;
 | ||
| create table t1(f1 int);
 | ||
| create view v1 as select f1 from t1;
 | ||
| select * from v1 where F1 = 1;
 | ||
| f1
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1(c1 int);
 | ||
| create table t2(c2 int);
 | ||
| insert into t1 values (1),(2),(3);
 | ||
| insert into t2 values (1);
 | ||
| SELECT c1 FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
 | ||
| c1
 | ||
| 1
 | ||
| SELECT c1 FROM t1 WHERE EXISTS (SELECT c2 FROM t2 WHERE c2 = c1);
 | ||
| c1
 | ||
| 1
 | ||
| create view v1 as SELECT c1 FROM t1 WHERE c1 IN (SELECT c2 FROM t2);
 | ||
| create view v2 as SELECT c1 FROM t1 WHERE EXISTS (SELECT c2 FROM t2 WHERE c2 = c1);
 | ||
| select * from v1;
 | ||
| c1
 | ||
| 1
 | ||
| select * from v2;
 | ||
| c1
 | ||
| 1
 | ||
| select * from (select c1 from v2) X;
 | ||
| c1
 | ||
| 1
 | ||
| drop view v2, v1;
 | ||
| drop table t1, t2;
 | ||
| CREATE TABLE t1 (C1 INT, C2 INT);
 | ||
| CREATE TABLE t2 (C2 INT);
 | ||
| CREATE VIEW v1 AS SELECT C2 FROM t2;
 | ||
| CREATE VIEW v2 AS SELECT C1 FROM t1 LEFT OUTER JOIN v1 USING (C2);
 | ||
| SELECT * FROM v2;
 | ||
| C1
 | ||
| drop view v2, v1;
 | ||
| drop table t1, t2;
 | ||
| create table t1 (col1 char(5),col2 int,col3 int);
 | ||
| insert into t1 values ('one',10,25), ('two',10,50), ('two',10,50), ('one',20,25), ('one',30,25);
 | ||
| create view v1 as select * from t1;
 | ||
| select col1,group_concat(col2,col3) from t1 group by col1;
 | ||
| col1	group_concat(col2,col3)
 | ||
| one	1025,2025,3025
 | ||
| two	1050,1050
 | ||
| select col1,group_concat(col2,col3) from v1 group by col1;
 | ||
| col1	group_concat(col2,col3)
 | ||
| one	1025,2025,3025
 | ||
| two	1050,1050
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 int, s2 char);
 | ||
| create view v1 as select s1, s2 from t1;
 | ||
| select s2 from v1 vq1 where 2 = (select count(*) from v1 vq2 having vq1.s2 = vq2.s2);
 | ||
| ERROR 42S22: Unknown column 'vq2.s2' in 'HAVING'
 | ||
| select s2 from v1 vq1 where 2 = (select count(*) aa from v1 vq2 having vq1.s2 = aa);
 | ||
| s2
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (a1 int);
 | ||
| CREATE TABLE t2 (a2 int);
 | ||
| INSERT INTO t1 VALUES (1), (2), (3), (4);
 | ||
| INSERT INTO t2 VALUES (1), (2), (3);
 | ||
| CREATE VIEW v1(a,b) AS SELECT a1,a2 FROM t1 JOIN t2 ON a1=a2 WHERE a1>1;
 | ||
| SELECT * FROM v1;
 | ||
| a	b
 | ||
| 2	2
 | ||
| 3	3
 | ||
| CREATE TABLE t3 SELECT * FROM v1;
 | ||
| SELECT * FROM t3;
 | ||
| a	b
 | ||
| 2	2
 | ||
| 3	3
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2,t3;
 | ||
| create table t1 (a int);
 | ||
| create table t2 like t1;
 | ||
| create table t3 like t1;
 | ||
| create view v1 as select t1.a x, t2.a y from t1 join t2 where t1.a=t2.a;
 | ||
| insert into t3 select x from v1;
 | ||
| insert into t2 select x from v1;
 | ||
| drop view v1;
 | ||
| drop table t1,t2,t3;
 | ||
| CREATE TABLE t1 (col1 int PRIMARY KEY, col2 varchar(10));
 | ||
| INSERT INTO t1 VALUES(1,'trudy');
 | ||
| INSERT INTO t1 VALUES(2,'peter');
 | ||
| INSERT INTO t1 VALUES(3,'sanja');
 | ||
| INSERT INTO t1 VALUES(4,'monty');
 | ||
| INSERT INTO t1 VALUES(5,'david');
 | ||
| INSERT INTO t1 VALUES(6,'kent');
 | ||
| INSERT INTO t1 VALUES(7,'carsten');
 | ||
| INSERT INTO t1 VALUES(8,'ranger');
 | ||
| INSERT INTO t1 VALUES(10,'matt');
 | ||
| CREATE TABLE t2 (col1 int, col2 int, col3 char(1));
 | ||
| INSERT INTO t2 VALUES (1,1,'y');
 | ||
| INSERT INTO t2 VALUES (1,2,'y');
 | ||
| INSERT INTO t2 VALUES (2,1,'n');
 | ||
| INSERT INTO t2 VALUES (3,1,'n');
 | ||
| INSERT INTO t2 VALUES (4,1,'y');
 | ||
| INSERT INTO t2 VALUES (4,2,'n');
 | ||
| INSERT INTO t2 VALUES (4,3,'n');
 | ||
| INSERT INTO t2 VALUES (6,1,'n');
 | ||
| INSERT INTO t2 VALUES (8,1,'y');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT a.col1,a.col2,b.col2,b.col3
 | ||
| FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1
 | ||
| WHERE b.col2 IS NULL OR
 | ||
| b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
 | ||
| col1	col2	col2	col3
 | ||
| 1	trudy	2	y
 | ||
| 2	peter	1	n
 | ||
| 3	sanja	1	n
 | ||
| 4	monty	3	n
 | ||
| 5	david	NULL	NULL
 | ||
| 6	kent	1	n
 | ||
| 7	carsten	NULL	NULL
 | ||
| 8	ranger	1	y
 | ||
| 10	matt	NULL	NULL
 | ||
| SELECT a.col1,a.col2,b.col2,b.col3
 | ||
| FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1
 | ||
| WHERE b.col2 IS NULL OR
 | ||
| b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
 | ||
| col1	col2	col2	col3
 | ||
| 1	trudy	2	y
 | ||
| 2	peter	1	n
 | ||
| 3	sanja	1	n
 | ||
| 4	monty	3	n
 | ||
| 5	david	NULL	NULL
 | ||
| 6	kent	1	n
 | ||
| 7	carsten	NULL	NULL
 | ||
| 8	ranger	1	y
 | ||
| 10	matt	NULL	NULL
 | ||
| CREATE VIEW v2 AS SELECT * FROM t2;
 | ||
| SELECT a.col1,a.col2,b.col2,b.col3
 | ||
| FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1
 | ||
| WHERE b.col2 IS NULL OR
 | ||
| b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
 | ||
| col1	col2	col2	col3
 | ||
| 1	trudy	2	y
 | ||
| 2	peter	1	n
 | ||
| 3	sanja	1	n
 | ||
| 4	monty	3	n
 | ||
| 5	david	NULL	NULL
 | ||
| 6	kent	1	n
 | ||
| 7	carsten	NULL	NULL
 | ||
| 8	ranger	1	y
 | ||
| 10	matt	NULL	NULL
 | ||
| SELECT a.col1,a.col2,b.col2,b.col3
 | ||
| FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1
 | ||
| WHERE a.col1 IN (1,5,9) AND
 | ||
| (b.col2 IS NULL OR
 | ||
| b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1));
 | ||
| col1	col2	col2	col3
 | ||
| 1	trudy	2	y
 | ||
| 5	david	NULL	NULL
 | ||
| CREATE VIEW v3 AS SELECT * FROM t1 WHERE col1 IN (1,5,9);
 | ||
| SELECT a.col1,a.col2,b.col2,b.col3
 | ||
| FROM v2 b RIGHT JOIN v3 a ON a.col1=b.col1
 | ||
| WHERE b.col2 IS NULL OR
 | ||
| b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
 | ||
| col1	col2	col2	col3
 | ||
| 1	trudy	2	y
 | ||
| 5	david	NULL	NULL
 | ||
| DROP VIEW v1,v2,v3;
 | ||
| DROP TABLE t1,t2;
 | ||
| create table t1 as select 1 A union select 2 union select 3;
 | ||
| create table t2 as select * from t1;
 | ||
| create view v1 as select * from t1 where a in (select * from t2);
 | ||
| select * from v1 A, v1 B where A.a = B.a;
 | ||
| A	A
 | ||
| 1	1
 | ||
| 2	2
 | ||
| 3	3
 | ||
| create table t3 as select a a,a b from t2;
 | ||
| create view v2 as select * from t3 where
 | ||
| a in (select * from t1) or b in (select * from t2);
 | ||
| select * from v2 A, v2 B where A.a = B.b;
 | ||
| a	b	a	b
 | ||
| 1	1	1	1
 | ||
| 2	2	2	2
 | ||
| 3	3	3	3
 | ||
| drop view v1, v2;
 | ||
| drop table t1, t2, t3;
 | ||
| CREATE TABLE t1 (a int);
 | ||
| CREATE TABLE t2 (b int);
 | ||
| INSERT INTO t1 VALUES (1), (2), (3), (4);
 | ||
| INSERT INTO t2 VALUES (4), (2);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1,t2 WHERE t1.a=t2.b;
 | ||
| SELECT * FROM v1;
 | ||
| a	b
 | ||
| 2	2
 | ||
| 4	4
 | ||
| CREATE VIEW v2 AS SELECT * FROM v1;
 | ||
| SELECT * FROM v2;
 | ||
| a	b
 | ||
| 2	2
 | ||
| 4	4
 | ||
| DROP VIEW v2,v1;
 | ||
| DROP TABLE t1, t2;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select sum(a) from t1 group by a;
 | ||
| create procedure p1()
 | ||
| begin
 | ||
| select * from v1;
 | ||
| end//
 | ||
| call p1();
 | ||
| sum(a)
 | ||
| call p1();
 | ||
| sum(a)
 | ||
| drop procedure p1;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1(a char(2) primary key, b char(2));
 | ||
| CREATE TABLE t2(a char(2), b char(2), index i(a));
 | ||
| INSERT INTO t1 VALUES ('a','1'), ('b','2');
 | ||
| INSERT INTO t2 VALUES ('a','5'), ('a','6'), ('b','5'), ('b','6');
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT t1.b as c, t2.b as d FROM t1,t2 WHERE t1.a=t2.a;
 | ||
| SELECT d, c FROM v1 ORDER BY d,c;
 | ||
| d	c
 | ||
| 5	1
 | ||
| 5	2
 | ||
| 6	1
 | ||
| 6	2
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1, t2;
 | ||
| create table t1 (s1 int);
 | ||
| create view  v1 as select sum(distinct s1) from t1;
 | ||
| select * from v1;
 | ||
| sum(distinct s1)
 | ||
| NULL
 | ||
| drop view v1;
 | ||
| create view  v1 as select avg(distinct s1) from t1;
 | ||
| select * from v1;
 | ||
| avg(distinct s1)
 | ||
| NULL
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create view v1 as select cast(1 as decimal);
 | ||
| select * from v1;
 | ||
| cast(1 as decimal)
 | ||
| 1
 | ||
| drop view v1;
 | ||
| create table t1(f1 int);
 | ||
| create table t2(f2 int);
 | ||
| insert into t1 values(1),(2),(3);
 | ||
| insert into t2 values(1),(2),(3);
 | ||
| create view v1 as select * from t1,t2 where f1=f2;
 | ||
| create table t3 (f1 int, f2 int);
 | ||
| insert into t3 select * from v1 order by 1;
 | ||
| select * from t3;
 | ||
| f1	f2
 | ||
| 1	1
 | ||
| 2	2
 | ||
| 3	3
 | ||
| drop view v1;
 | ||
| drop table t1,t2,t3;
 | ||
| create view v1 as select '\\','\\shazam';
 | ||
| select * from v1;
 | ||
| \	\shazam
 | ||
| \	\shazam
 | ||
| drop view v1;
 | ||
| create view v1 as select '\'','\shazam';
 | ||
| select * from v1;
 | ||
| '	shazam
 | ||
| '	shazam
 | ||
| drop view v1;
 | ||
| create view v1 as select 'k','K';
 | ||
| select * from v1;
 | ||
| k	My_exp_K
 | ||
| k	K
 | ||
| drop view v1;
 | ||
| create table t1 (s1 int);
 | ||
| create view v1 as select s1, 's1' from t1;
 | ||
| select * from v1;
 | ||
| s1	My_exp_s1
 | ||
| drop view v1;
 | ||
| create view v1 as select 's1', s1 from t1;
 | ||
| select * from v1;
 | ||
| My_exp_s1	s1
 | ||
| drop view v1;
 | ||
| create view v1 as select 's1', s1, 1 as My_exp_s1 from t1;
 | ||
| select * from v1;
 | ||
| My_exp_1_s1	s1	My_exp_s1
 | ||
| drop view v1;
 | ||
| create view v1 as select 1 as My_exp_s1, 's1', s1  from t1;
 | ||
| select * from v1;
 | ||
| My_exp_s1	My_exp_1_s1	s1
 | ||
| drop view v1;
 | ||
| create view v1 as select 1 as s1, 's1', 's1' from t1;
 | ||
| select * from v1;
 | ||
| s1	My_exp_s1	My_exp_1_s1
 | ||
| drop view v1;
 | ||
| create view v1 as select 's1', 's1', 1 as s1 from t1;
 | ||
| select * from v1;
 | ||
| My_exp_1_s1	My_exp_s1	s1
 | ||
| drop view v1;
 | ||
| create view v1 as select s1, 's1', 's1' from t1;
 | ||
| select * from v1;
 | ||
| s1	My_exp_s1	My_exp_1_s1
 | ||
| drop view v1;
 | ||
| create view v1 as select 's1', 's1', s1 from t1;
 | ||
| select * from v1;
 | ||
| My_exp_1_s1	My_exp_s1	s1
 | ||
| drop view v1;
 | ||
| create view v1 as select 1 as s1, 's1', s1 from t1;
 | ||
| ERROR 42S21: Duplicate column name 's1'
 | ||
| create view v1 as select 's1', s1, 1 as s1 from t1;
 | ||
| ERROR 42S21: Duplicate column name 's1'
 | ||
| drop table t1;
 | ||
| create view v1(k, K) as select 1,2;
 | ||
| ERROR 42S21: Duplicate column name 'K'
 | ||
| create view v1 as SELECT TIME_FORMAT(SEC_TO_TIME(3600),'%H:%i') as t;
 | ||
| select * from v1;
 | ||
| t
 | ||
| 01:00
 | ||
| drop view v1;
 | ||
| create table t1 (a timestamp default now());
 | ||
| create table t2 (b timestamp default now());
 | ||
| create view v1 as select a,b,t1.a < now() from t1,t2 where t1.a < now();
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t2`.`b` AS `b`,`t1`.`a` < current_timestamp() AS `t1.a < now()` from (`t1` join `t2`) where `t1`.`a` < current_timestamp()	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| drop table t1, t2;
 | ||
| CREATE TABLE t1 ( a varchar(50) );
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = CURRENT_USER();
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where `t1`.`a` = current_user()	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = VERSION();
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where `t1`.`a` = version()	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = DATABASE();
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where `t1`.`a` = database()	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (col1 time);
 | ||
| CREATE TABLE t2 (col1 time);
 | ||
| CREATE VIEW v1 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t1;
 | ||
| CREATE VIEW v2 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
 | ||
| CREATE VIEW v3 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t1;
 | ||
| CREATE VIEW v4 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
 | ||
| CREATE VIEW v5 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t1;
 | ||
| CREATE VIEW v6 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
 | ||
| DROP TABLE t1;
 | ||
| CHECK TABLE v1, v2, v3, v4, v5, v6;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	check	Error	Table 'test.t1' doesn't exist
 | ||
| test.v1	check	Error	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| test.v1	check	error	Corrupt
 | ||
| test.v2	check	status	OK
 | ||
| test.v3	check	Error	Table 'test.t1' doesn't exist
 | ||
| test.v3	check	Error	View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| test.v3	check	error	Corrupt
 | ||
| test.v4	check	status	OK
 | ||
| test.v5	check	Error	Table 'test.t1' doesn't exist
 | ||
| test.v5	check	Error	View 'test.v5' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| test.v5	check	error	Corrupt
 | ||
| test.v6	check	status	OK
 | ||
| drop view v1, v2, v3, v4, v5, v6;
 | ||
| drop table t2;
 | ||
| drop function if exists f1;
 | ||
| drop function if exists f2;
 | ||
| CREATE TABLE t1 (col1 time);
 | ||
| CREATE TABLE t2 (col1 time);
 | ||
| CREATE TABLE t3 (col1 time);
 | ||
| create function f1 () returns int return (select max(col1) from t1);
 | ||
| create function f2 () returns int return (select max(col1) from t2);
 | ||
| CREATE VIEW v1 AS SELECT f1() FROM t3;
 | ||
| CREATE VIEW v2 AS SELECT f2() FROM t3;
 | ||
| CREATE VIEW v3 AS SELECT f1() FROM t3;
 | ||
| CREATE VIEW v4 AS SELECT f2() FROM t3;
 | ||
| CREATE VIEW v5 AS SELECT f1() FROM t3;
 | ||
| CREATE VIEW v6 AS SELECT f2() FROM t3;
 | ||
| drop function f1;
 | ||
| CHECK TABLE v1, v2, v3, v4, v5, v6;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	check	Error	FUNCTION test.f1 does not exist
 | ||
| test.v1	check	Error	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| test.v1	check	error	Corrupt
 | ||
| test.v2	check	status	OK
 | ||
| test.v3	check	Error	FUNCTION test.f1 does not exist
 | ||
| test.v3	check	Error	View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| test.v3	check	error	Corrupt
 | ||
| test.v4	check	status	OK
 | ||
| test.v5	check	Error	FUNCTION test.f1 does not exist
 | ||
| test.v5	check	Error	View 'test.v5' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| test.v5	check	error	Corrupt
 | ||
| test.v6	check	status	OK
 | ||
| create function f1 () returns int return (select max(col1) from t1);
 | ||
| DROP TABLE t1;
 | ||
| CHECK TABLE v1, v2, v3, v4, v5, v6;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	check	status	OK
 | ||
| test.v2	check	status	OK
 | ||
| test.v3	check	status	OK
 | ||
| test.v4	check	status	OK
 | ||
| test.v5	check	status	OK
 | ||
| test.v6	check	status	OK
 | ||
| drop function f1;
 | ||
| drop function f2;
 | ||
| drop view v1, v2, v3, v4, v5, v6;
 | ||
| drop table t2,t3;
 | ||
| create table t1 (f1 date);
 | ||
| insert into t1 values ('2005-01-01'),('2005-02-02');
 | ||
| create view v1 as select * from t1;
 | ||
| select * from v1 where f1='2005.02.02';
 | ||
| f1
 | ||
| 2005-02-02
 | ||
| select * from v1 where '2005.02.02'=f1;
 | ||
| f1
 | ||
| 2005-02-02
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (f59 int, f60 int, f61 int);
 | ||
| insert into t1 values (19,41,32);
 | ||
| create view v1 as select f59, f60 from t1 where f59 in
 | ||
| (select f59 from t1);
 | ||
| update v1 set f60=2345;
 | ||
| ERROR HY000: The target table v1 of the UPDATE is not updatable
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (s1 int);
 | ||
| create view v1 as select var_samp(s1) from t1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select var_samp(`t1`.`s1`) AS `var_samp(s1)` from `t1`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| set sql_mode='strict_all_tables';
 | ||
| CREATE TABLE t1 (col1 INT NOT NULL, col2 INT NOT NULL);
 | ||
| CREATE VIEW v1 (vcol1) AS SELECT col1 FROM t1;
 | ||
| CREATE VIEW v2 (vcol1) AS SELECT col1 FROM t1 WHERE col2 > 2;
 | ||
| INSERT INTO t1 (col1) VALUES(12);
 | ||
| ERROR HY000: Field 'col2' doesn't have a default value
 | ||
| INSERT INTO v1 (vcol1) VALUES(12);
 | ||
| ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
 | ||
| INSERT INTO v2 (vcol1) VALUES(12);
 | ||
| ERROR HY000: Field of view 'test.v2' underlying table doesn't have a default value
 | ||
| set sql_mode=default;
 | ||
| drop view v2,v1;
 | ||
| drop table t1;
 | ||
| create table t1 (f1 int);
 | ||
| insert into t1 values (1);
 | ||
| create view v1 as select f1 from t1;
 | ||
| select f1 as alias from v1;
 | ||
| alias
 | ||
| 1
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (s1 int, s2 int);
 | ||
| INSERT  INTO t1 VALUES (1,2);
 | ||
| CREATE VIEW v1 AS SELECT s2 AS s1, s1 AS s2 FROM t1;
 | ||
| SELECT * FROM v1;
 | ||
| s1	s2
 | ||
| 2	1
 | ||
| CREATE PROCEDURE p1 () SELECT * FROM v1;
 | ||
| CALL p1();
 | ||
| s1	s2
 | ||
| 2	1
 | ||
| ALTER VIEW v1 AS SELECT s1 AS s1, s2 AS s2 FROM t1;
 | ||
| CALL p1();
 | ||
| s1	s2
 | ||
| 1	2
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT s2 AS s1, s1 AS s2 FROM t1;
 | ||
| CALL p1();
 | ||
| s1	s2
 | ||
| 2	1
 | ||
| DROP PROCEDURE p1;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| create table t1 (f1 int, f2 int);
 | ||
| create view v1 as select f1 as f3, f2 as f1 from t1;
 | ||
| insert into t1 values (1,3),(2,1),(3,2);
 | ||
| select * from v1 order by f1;
 | ||
| f3	f1
 | ||
| 2	1
 | ||
| 3	2
 | ||
| 1	3
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (f1 char);
 | ||
| INSERT INTO t1 VALUES ('A');
 | ||
| CREATE VIEW  v1 AS SELECT * FROM t1;
 | ||
| INSERT INTO t1 VALUES('B');
 | ||
| SELECT * FROM v1;
 | ||
| f1
 | ||
| A
 | ||
| B
 | ||
| SELECT * FROM t1;
 | ||
| f1
 | ||
| A
 | ||
| B
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 ( bug_table_seq   INTEGER NOT NULL);
 | ||
| CREATE OR REPLACE VIEW v1 AS SELECT * from t1;
 | ||
| DROP PROCEDURE IF EXISTS p1;
 | ||
| Warnings:
 | ||
| Note	1305	PROCEDURE test.p1 does not exist
 | ||
| CREATE PROCEDURE p1 ( )
 | ||
| BEGIN
 | ||
| DO (SELECT  @next := IFNULL(max(bug_table_seq),0) + 1 FROM v1);
 | ||
| INSERT INTO t1 VALUES (1);
 | ||
| END //
 | ||
| CALL p1();
 | ||
| DROP PROCEDURE p1;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| create table t1(f1 datetime);
 | ||
| insert into t1 values('2005.01.01 12:0:0');
 | ||
| create view v1 as select f1, subtime(f1, '1:1:1') as sb from t1;
 | ||
| select * from v1;
 | ||
| f1	sb
 | ||
| 2005-01-01 12:00:00	2005-01-01 10:58:59
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (
 | ||
| aid int PRIMARY KEY,
 | ||
| fn varchar(20) NOT NULL,
 | ||
| ln varchar(20) NOT NULL
 | ||
| );
 | ||
| CREATE TABLE t2 (
 | ||
| aid int NOT NULL,
 | ||
| pid int NOT NULL
 | ||
| );
 | ||
| INSERT INTO t1 VALUES(1,'a','b'), (2,'c','d');
 | ||
| INSERT INTO t2 values (1,1), (2,1), (2,2);
 | ||
| CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid;
 | ||
| SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
 | ||
| WHERE t1.aid = t2.aid GROUP BY pid;
 | ||
| pid	GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
 | ||
| 1	a b,c d
 | ||
| 2	c d
 | ||
| SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM v1 GROUP BY pid;
 | ||
| pid	GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
 | ||
| 1	a b,c d
 | ||
| 2	c d
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| CREATE TABLE t1 (id int PRIMARY KEY, f varchar(255));
 | ||
| CREATE VIEW v1 AS SELECT id, f FROM t1 WHERE id <= 2;
 | ||
| INSERT INTO t1 VALUES (2, 'foo2');
 | ||
| INSERT INTO t1 VALUES (1, 'foo1');
 | ||
| SELECT * FROM v1;
 | ||
| id	f
 | ||
| 1	foo1
 | ||
| 2	foo2
 | ||
| SELECT * FROM v1;
 | ||
| id	f
 | ||
| 1	foo1
 | ||
| 2	foo2
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (pk int PRIMARY KEY, b int);
 | ||
| CREATE TABLE t2 (pk int PRIMARY KEY, fk int, INDEX idx(fk));
 | ||
| CREATE TABLE t3 (pk int PRIMARY KEY, fk int, INDEX idx(fk));
 | ||
| CREATE TABLE t4 (pk int PRIMARY KEY, fk int, INDEX idx(fk));
 | ||
| CREATE TABLE t5 (pk int PRIMARY KEY, fk int, INDEX idx(fk));
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT t1.pk as a FROM t1,t2,t3,t4,t5
 | ||
| WHERE t1.b IS NULL AND
 | ||
| t1.pk=t2.fk AND t2.pk=t3.fk AND t3.pk=t4.fk AND t4.pk=t5.fk;
 | ||
| SELECT a FROM v1;
 | ||
| a
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2,t3,t4,t5;
 | ||
| create view v1 as select timestampdiff(day,'1997-01-01 00:00:00','1997-01-02 00:00:00') as f1;
 | ||
| select * from v1;
 | ||
| f1
 | ||
| 1
 | ||
| drop view v1;
 | ||
| create table t1(a int);
 | ||
| create procedure p1() create view v1 as select * from t1;
 | ||
| drop table t1;
 | ||
| call p1();
 | ||
| ERROR 42S02: Table 'test.t1' doesn't exist
 | ||
| call p1();
 | ||
| ERROR 42S02: Table 'test.t1' doesn't exist
 | ||
| drop procedure p1;
 | ||
| create table t1 (f1 int);
 | ||
| create table t2 (f1 int);
 | ||
| insert into t1 values (1);
 | ||
| insert into t2 values (2);
 | ||
| create view v1 as select * from t1 union select * from t2 union all select * from t2;
 | ||
| select * from v1;
 | ||
| f1
 | ||
| 1
 | ||
| 2
 | ||
| 2
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| CREATE TEMPORARY TABLE t1 (a int);
 | ||
| CREATE FUNCTION f1 () RETURNS int RETURN (SELECT COUNT(*) FROM t1);
 | ||
| CREATE VIEW v1 AS SELECT f1();
 | ||
| ERROR HY000: View's SELECT refers to a temporary table 't1'
 | ||
| DROP FUNCTION f1;
 | ||
| DROP TABLE t1;
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| DROP VIEW  IF EXISTS v1;
 | ||
| CREATE TABLE t1 (f4 CHAR(5));
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| DESCRIBE v1;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| f4	char(5)	YES		NULL	
 | ||
| ALTER TABLE t1 CHANGE COLUMN f4 f4x CHAR(5);
 | ||
| DESCRIBE v1;
 | ||
| ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| DROP TABLE t1;
 | ||
| DROP VIEW v1;
 | ||
| create table t1 (f1 char);
 | ||
| create view v1 as select strcmp(f1,'a') from t1;
 | ||
| select * from v1;
 | ||
| strcmp(f1,'a')
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (f1 int, f2 int,f3 int);
 | ||
| insert into t1 values (1,10,20),(2,0,0);
 | ||
| create view v1 as select * from t1;
 | ||
| select if(sum(f1)>1,f2,f3) from v1 group by f1;
 | ||
| if(sum(f1)>1,f2,f3)
 | ||
| 20
 | ||
| 0
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (
 | ||
| r_object_id char(16) NOT NULL,
 | ||
| group_name varchar(32) NOT NULL
 | ||
| );
 | ||
| create table t2 (
 | ||
| r_object_id char(16) NOT NULL,
 | ||
| i_position int(11) NOT NULL,
 | ||
| users_names varchar(32) default NULL
 | ||
| );
 | ||
| create view v1 as select r_object_id, group_name from t1;
 | ||
| create view v2 as select r_object_id, i_position, users_names from t2;
 | ||
| create unique index r_object_id on t1(r_object_id);
 | ||
| create index group_name on t1(group_name);
 | ||
| create unique index r_object_id_i_position on t2(r_object_id,i_position);
 | ||
| create index users_names on t2(users_names);
 | ||
| insert into t1 values('120001a080000542','tstgroup1');
 | ||
| insert into t2 values('120001a080000542',-1, 'guser01');
 | ||
| insert into t2 values('120001a080000542',-2, 'guser02');
 | ||
| select v1.r_object_id, v2.users_names from v1, v2
 | ||
| where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
 | ||
| order by users_names;
 | ||
| r_object_id	users_names
 | ||
| 120001a080000542	guser01
 | ||
| 120001a080000542	guser02
 | ||
| drop view v1, v2;
 | ||
| drop table t1, t2;
 | ||
| create table t1 (s1 int);
 | ||
| create view abc as select * from t1 as abc;
 | ||
| drop table t1;
 | ||
| drop view abc;
 | ||
| #
 | ||
| # Bug#12993 View column rename broken in subselect
 | ||
| #
 | ||
| flush status;
 | ||
| flush global status;
 | ||
| create table t1(f1 char(1));
 | ||
| create view v1 as select * from t1;
 | ||
| select * from (select f1 as f2, f1 as f3 from v1) v where v.f2='a';
 | ||
| f2	f3
 | ||
| show status like "Created_tmp%";
 | ||
| Variable_name	Value
 | ||
| Created_tmp_disk_tables	0
 | ||
| Created_tmp_files	0
 | ||
| Created_tmp_tables	0
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| set @tmp=@@optimizer_switch;
 | ||
| set @@optimizer_switch='derived_merge=OFF';
 | ||
| create table t1(f1 char(1));
 | ||
| create view v1 as select * from t1;
 | ||
| select * from (select f1 as f2, f1 as f3 from v1) v where v.f2='a';
 | ||
| f2	f3
 | ||
| show status like "Created_tmp%";
 | ||
| Variable_name	Value
 | ||
| Created_tmp_disk_tables	0
 | ||
| Created_tmp_files	0
 | ||
| Created_tmp_tables	1
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| set @@optimizer_switch=@tmp;
 | ||
| create view v1 as SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
 | ||
| select * from v1;
 | ||
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET')
 | ||
| NULL
 | ||
| drop view v1;
 | ||
| CREATE TABLE t1 (date DATE NOT NULL);
 | ||
| INSERT INTO  t1 VALUES ('2005-09-06');
 | ||
| CREATE VIEW v1 AS SELECT DAYNAME(date) FROM t1;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select dayname(`t1`.`date`) AS `DAYNAME(date)` from `t1`	latin1	latin1_swedish_ci
 | ||
| CREATE VIEW v2 AS SELECT DAYOFWEEK(date) FROM t1;
 | ||
| SHOW CREATE VIEW v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select dayofweek(`t1`.`date`) AS `DAYOFWEEK(date)` from `t1`	latin1	latin1_swedish_ci
 | ||
| CREATE VIEW v3 AS SELECT WEEKDAY(date) FROM t1;
 | ||
| SHOW CREATE VIEW v3;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select weekday(`t1`.`date`) AS `WEEKDAY(date)` from `t1`	latin1	latin1_swedish_ci
 | ||
| SELECT DAYNAME('2005-09-06');
 | ||
| DAYNAME('2005-09-06')
 | ||
| Tuesday
 | ||
| SELECT DAYNAME(date) FROM t1;
 | ||
| DAYNAME(date)
 | ||
| Tuesday
 | ||
| SELECT * FROM v1;
 | ||
| DAYNAME(date)
 | ||
| Tuesday
 | ||
| SELECT DAYOFWEEK('2005-09-06');
 | ||
| DAYOFWEEK('2005-09-06')
 | ||
| 3
 | ||
| SELECT DAYOFWEEK(date) FROM t1;
 | ||
| DAYOFWEEK(date)
 | ||
| 3
 | ||
| SELECT * FROM v2;
 | ||
| DAYOFWEEK(date)
 | ||
| 3
 | ||
| SELECT WEEKDAY('2005-09-06');
 | ||
| WEEKDAY('2005-09-06')
 | ||
| 1
 | ||
| SELECT WEEKDAY(date) FROM t1;
 | ||
| WEEKDAY(date)
 | ||
| 1
 | ||
| SELECT * FROM v3;
 | ||
| WEEKDAY(date)
 | ||
| 1
 | ||
| DROP TABLE t1;
 | ||
| DROP VIEW  v1, v2, v3;
 | ||
| CREATE TABLE t1 ( a int, b int );
 | ||
| INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
 | ||
| CREATE VIEW v1 AS SELECT a,b FROM t1;
 | ||
| SELECT t1.a FROM t1 GROUP BY t1.a HAVING a > 1;
 | ||
| a
 | ||
| 2
 | ||
| 3
 | ||
| SELECT v1.a FROM v1 GROUP BY v1.a HAVING a > 1;
 | ||
| a
 | ||
| 2
 | ||
| 3
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 ( a int, b int );
 | ||
| INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
 | ||
| CREATE VIEW v1 AS SELECT a,b FROM t1;
 | ||
| SELECT t1.a FROM t1 GROUP BY t1.a HAVING t1.a > 1;
 | ||
| a
 | ||
| 2
 | ||
| 3
 | ||
| SELECT v1.a FROM v1 GROUP BY v1.a HAVING v1.a > 1;
 | ||
| a
 | ||
| 2
 | ||
| 3
 | ||
| SELECT t_1.a FROM t1 AS t_1 GROUP BY t_1.a HAVING t_1.a IN (1,2,3);
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| SELECT v_1.a FROM v1 AS v_1 GROUP BY v_1.a HAVING v_1.a IN (1,2,3);
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (a INT, b INT, INDEX(a,b));
 | ||
| CREATE TABLE t2 LIKE t1;
 | ||
| CREATE TABLE t3 (a INT);
 | ||
| INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
 | ||
| INSERT INTO t2 VALUES (1,1),(2,2),(3,3);
 | ||
| INSERT INTO t3 VALUES (1),(2),(3);
 | ||
| CREATE VIEW v1 AS SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a AND t1.b=t2.b;
 | ||
| CREATE VIEW v2 AS SELECT t3.* FROM t1,t3 WHERE t1.a=t3.a;
 | ||
| EXPLAIN SELECT t1.* FROM t1 JOIN t2 WHERE t1.a=t2.a AND t1.b=t2.b AND t1.a=1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ref	a	a	5	const	1	Using where; Using index
 | ||
| 1	SIMPLE	t2	ref	a	a	10	const,test.t1.b	1	Using index
 | ||
| EXPLAIN SELECT * FROM v1 WHERE a=1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ref	a	a	5	const	1	Using where; Using index
 | ||
| 1	SIMPLE	t2	ref	a	a	10	const,test.t1.b	1	Using index
 | ||
| EXPLAIN SELECT * FROM v2 WHERE a=1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ref	a	a	5	const	1	Using index
 | ||
| 1	SIMPLE	t3	ALL	NULL	NULL	NULL	NULL	3	Using where; Using join buffer (flat, BNL join)
 | ||
| DROP VIEW v1,v2;
 | ||
| DROP TABLE t1,t2,t3;
 | ||
| create table t1 (f1 int);
 | ||
| create view v1 as select t1.f1 as '123
 | ||
| 456' from t1;
 | ||
| select * from v1;
 | ||
| 123
 | ||
| 456
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (f1 int, f2 int);
 | ||
| insert into t1 values(1,1),(1,2),(1,3);
 | ||
| create view v1 as select f1 ,group_concat(f2 order by f2 asc) from t1 group by f1;
 | ||
| create view v2 as select f1 ,group_concat(f2 order by f2 desc) from t1 group by f1;
 | ||
| select * from v1;
 | ||
| f1	group_concat(f2 order by f2 asc)
 | ||
| 1	1,2,3
 | ||
| select * from v2;
 | ||
| f1	group_concat(f2 order by f2 desc)
 | ||
| 1	3,2,1
 | ||
| drop view v1,v2;
 | ||
| drop table t1;
 | ||
| create table t1 (x int, y int);
 | ||
| create table t2 (x int, y int, z int);
 | ||
| create table t3 (x int, y int, z int);
 | ||
| create table t4 (x int, y int, z int);
 | ||
| create view v1 as
 | ||
| select t1.x
 | ||
| from (
 | ||
| (t1 join t2 on ((t1.y = t2.y)))
 | ||
| join
 | ||
| (t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z))
 | ||
| );
 | ||
| prepare stmt1 from "select count(*) from v1 where x = ?";
 | ||
| set @parm1=1;
 | ||
| execute stmt1 using @parm1;
 | ||
| count(*)
 | ||
| 0
 | ||
| execute stmt1 using @parm1;
 | ||
| count(*)
 | ||
| 0
 | ||
| drop view v1;
 | ||
| drop table t1,t2,t3,t4;
 | ||
| CREATE TABLE t1(id INT);
 | ||
| CREATE VIEW v1 AS SELECT id FROM t1;
 | ||
| OPTIMIZE TABLE v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	optimize	Error	'test.v1' is not of type 'BASE TABLE'
 | ||
| test.v1	optimize	status	Operation failed
 | ||
| ANALYZE TABLE v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	analyze	Error	'test.v1' is not of type 'BASE TABLE'
 | ||
| test.v1	analyze	status	Operation failed
 | ||
| REPAIR TABLE v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	repair	Error	'test.v1' is not of type 'BASE TABLE'
 | ||
| test.v1	repair	status	Operation failed
 | ||
| DROP TABLE t1;
 | ||
| OPTIMIZE TABLE v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	optimize	Error	'test.v1' is not of type 'BASE TABLE'
 | ||
| test.v1	optimize	status	Operation failed
 | ||
| ANALYZE TABLE v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	analyze	Error	'test.v1' is not of type 'BASE TABLE'
 | ||
| test.v1	analyze	status	Operation failed
 | ||
| REPAIR TABLE v1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	repair	Error	'test.v1' is not of type 'BASE TABLE'
 | ||
| test.v1	repair	status	Operation failed
 | ||
| DROP VIEW v1;
 | ||
| create definer = current_user() sql security invoker view v1 as select 1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `v1` AS select 1 AS `1`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| create definer = current_user sql security invoker view v1 as select 1;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `v1` AS select 1 AS `1`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| create table t1 (id INT, primary key(id));
 | ||
| insert into t1 values (1),(2);
 | ||
| create view v1 as select * from t1;
 | ||
| explain select id from v1 order by id;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	index	NULL	PRIMARY	4	NULL	2	Using index
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1(f1 int, f2 int);
 | ||
| insert into t1 values (null, 10), (null,2);
 | ||
| select f1, sum(f2) from t1 group by f1;
 | ||
| f1	sum(f2)
 | ||
| NULL	12
 | ||
| create view v1 as select * from t1;
 | ||
| select f1, sum(f2) from v1 group by f1;
 | ||
| f1	sum(f2)
 | ||
| NULL	12
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| drop procedure if exists p1;
 | ||
| create procedure p1 () deterministic
 | ||
| begin
 | ||
| create view v1 as select 1;
 | ||
| end;
 | ||
| //
 | ||
| call p1();
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| drop procedure p1;
 | ||
| CREATE VIEW v1 AS SELECT 42 AS Meaning;
 | ||
| DROP FUNCTION IF EXISTS f1;
 | ||
| CREATE FUNCTION f1() RETURNS INTEGER
 | ||
| BEGIN
 | ||
| DECLARE retn INTEGER;
 | ||
| SELECT Meaning FROM v1 INTO retn;
 | ||
| RETURN retn;
 | ||
| END
 | ||
| //
 | ||
| CREATE VIEW v2 AS SELECT f1();
 | ||
| select * from v2;
 | ||
| f1()
 | ||
| 42
 | ||
| drop view v2,v1;
 | ||
| drop function f1;
 | ||
| create table t1 (id numeric, warehouse_id numeric);
 | ||
| create view v1 as select id from t1;
 | ||
| create view v2 as
 | ||
| select t1.warehouse_id, v1.id as receipt_id
 | ||
| from t1, v1 where t1.id = v1.id;
 | ||
| insert into t1 (id, warehouse_id) values(3, 2);
 | ||
| insert into t1 (id, warehouse_id) values(4, 2);
 | ||
| insert into t1 (id, warehouse_id) values(5, 1);
 | ||
| select v2.receipt_id as alias1, v2.receipt_id as alias2 from v2
 | ||
| order by v2.receipt_id;
 | ||
| alias1	alias2
 | ||
| 3	3
 | ||
| 4	4
 | ||
| 5	5
 | ||
| drop view v2, v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (a int PRIMARY KEY, b int);
 | ||
| INSERT INTO t1 VALUES (2,20), (3,10), (1,10), (0,30), (5,10);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT MAX(a) FROM t1;
 | ||
| MAX(a)
 | ||
| 5
 | ||
| SELECT MAX(a) FROM v1;
 | ||
| MAX(a)
 | ||
| 5
 | ||
| EXPLAIN SELECT MAX(a) FROM t1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
 | ||
| EXPLAIN SELECT MAX(a) FROM v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
 | ||
| SELECT MIN(a) FROM t1;
 | ||
| MIN(a)
 | ||
| 0
 | ||
| SELECT MIN(a) FROM v1;
 | ||
| MIN(a)
 | ||
| 0
 | ||
| EXPLAIN SELECT MIN(a) FROM t1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
 | ||
| EXPLAIN SELECT MIN(a) FROM v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (x varchar(10));
 | ||
| INSERT INTO t1 VALUES (null), ('foo'), ('bar'), (null);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT IF(x IS NULL, 'blank', 'not blank') FROM v1 GROUP BY x;
 | ||
| IF(x IS NULL, 'blank', 'not blank')
 | ||
| blank
 | ||
| not blank
 | ||
| not blank
 | ||
| SELECT IF(x IS NULL, 'blank', 'not blank') AS x FROM t1 GROUP BY x;
 | ||
| x
 | ||
| blank
 | ||
| not blank
 | ||
| not blank
 | ||
| Warnings:
 | ||
| Warning	1052	Column 'x' in GROUP BY is ambiguous
 | ||
| SELECT IF(x IS NULL, 'blank', 'not blank') AS x FROM v1;
 | ||
| x
 | ||
| blank
 | ||
| not blank
 | ||
| not blank
 | ||
| blank
 | ||
| SELECT IF(x IS NULL, 'blank', 'not blank') AS y FROM v1 GROUP BY y;
 | ||
| y
 | ||
| blank
 | ||
| not blank
 | ||
| SELECT IF(x IS NULL, 'blank', 'not blank') AS x FROM v1 GROUP BY x;
 | ||
| x
 | ||
| blank
 | ||
| not blank
 | ||
| not blank
 | ||
| Warnings:
 | ||
| Warning	1052	Column 'x' in GROUP BY is ambiguous
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| drop table if exists t1;
 | ||
| drop view if exists v1;
 | ||
| create table t1 (id int);
 | ||
| create view v1 as select * from t1;
 | ||
| drop table t1;
 | ||
| show create view v1;
 | ||
| drop view v1;
 | ||
| //
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`id` AS `id` from `t1`	latin1	latin1_swedish_ci
 | ||
| create table t1(f1 int, f2 int);
 | ||
| create view v1 as select ta.f1 as a, tb.f1 as b from t1 ta, t1 tb where ta.f1=tb
 | ||
| .f1 and ta.f2=tb.f2;
 | ||
| insert into t1 values(1,1),(2,2);
 | ||
| create view v2 as select * from v1 where a > 1 with local check option;
 | ||
| select * from v2;
 | ||
| a	b
 | ||
| 2	2
 | ||
| update v2 set b=3 where a=2;
 | ||
| select * from v2;
 | ||
| a	b
 | ||
| 3	3
 | ||
| drop view v2, v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (a int);
 | ||
| INSERT INTO t1 VALUES (1), (2);
 | ||
| CREATE VIEW v1 AS SELECT SQRT(a) my_sqrt FROM t1;
 | ||
| SELECT my_sqrt FROM v1 ORDER BY my_sqrt;
 | ||
| my_sqrt
 | ||
| 1
 | ||
| 1.4142135623730951
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (id int PRIMARY KEY);
 | ||
| CREATE TABLE t2 (id int PRIMARY KEY);
 | ||
| INSERT INTO t1 VALUES (1), (3);
 | ||
| INSERT INTO t2 VALUES (1), (2), (3);
 | ||
| CREATE VIEW v2 AS SELECT * FROM t2;
 | ||
| SELECT COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id=t2.id;
 | ||
| COUNT(*)
 | ||
| 2
 | ||
| SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id;
 | ||
| id	id
 | ||
| 1	1
 | ||
| 3	3
 | ||
| SELECT COUNT(*) FROM t1 LEFT JOIN v2 ON t1.id=v2.id;
 | ||
| COUNT(*)
 | ||
| 2
 | ||
| DROP VIEW v2;
 | ||
| DROP TABLE t1, t2;
 | ||
| CREATE TABLE t1 (id int NOT NULL PRIMARY KEY,
 | ||
| td date DEFAULT NULL, KEY idx(td));
 | ||
| INSERT INTO t1 VALUES
 | ||
| (1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'),
 | ||
| (4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'),
 | ||
| (7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT * FROM t1 WHERE td BETWEEN CAST('2005.01.02' AS DATE) AND CAST('2005.01.04' AS DATE);
 | ||
| id	td
 | ||
| 2	2005-01-02
 | ||
| 3	2005-01-02
 | ||
| 4	2005-01-03
 | ||
| 5	2005-01-04
 | ||
| SELECT * FROM v1 WHERE td BETWEEN CAST('2005.01.02' AS DATE) AND CAST('2005.01.04' AS DATE);
 | ||
| id	td
 | ||
| 2	2005-01-02
 | ||
| 3	2005-01-02
 | ||
| 4	2005-01-03
 | ||
| 5	2005-01-04
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| create table t1 (a int);
 | ||
| create view v1 as select * from t1;
 | ||
| create view v2 as select * from v1;
 | ||
| drop table t1;
 | ||
| rename table v2 to t1;
 | ||
| select * from v1;
 | ||
| ERROR HY000: `test`.`v1` contains view recursion
 | ||
| drop view t1, v1;
 | ||
| create table t1 (a int);
 | ||
| create function f1() returns int
 | ||
| begin
 | ||
| declare mx int;
 | ||
| select max(a) from t1 into mx;
 | ||
| return mx;
 | ||
| end//
 | ||
| create view v1 as select f1() as a;
 | ||
| create view v2 as select * from v1;
 | ||
| drop table t1;
 | ||
| rename table v2 to t1;
 | ||
| select * from v1;
 | ||
| ERROR HY000: Recursive stored functions and triggers are not allowed
 | ||
| drop function f1;
 | ||
| drop view t1, v1;
 | ||
| create table t1 (dt datetime);
 | ||
| insert into t1 values (20040101000000), (20050101000000), (20060101000000);
 | ||
| create view v1 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from t1;
 | ||
| select * from v1;
 | ||
| ldt
 | ||
| 2004-01-01 03:00:00
 | ||
| 2005-01-01 03:00:00
 | ||
| 2006-01-01 03:00:00
 | ||
| drop view v1;
 | ||
| create view v1 as select * from t1 where convert_tz(dt, 'UTC', 'Europe/Moscow') >= 20050101000000;
 | ||
| select * from v1;
 | ||
| dt
 | ||
| 2005-01-01 00:00:00
 | ||
| 2006-01-01 00:00:00
 | ||
| create view v2 as select * from v1 where dt < 20060101000000;
 | ||
| select * from v2;
 | ||
| dt
 | ||
| 2005-01-01 00:00:00
 | ||
| drop view v2;
 | ||
| create view v2 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from v1;
 | ||
| select * from v2;
 | ||
| ldt
 | ||
| 2005-01-01 03:00:00
 | ||
| 2006-01-01 03:00:00
 | ||
| drop view v1, v2;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, d datetime);
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT id, date(d) + INTERVAL TIME_TO_SEC(d) SECOND AS t, COUNT(*)
 | ||
| FROM t1 GROUP BY id, t;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`id` AS `id`,cast(`t1`.`d` as date) + interval time_to_sec(`t1`.`d`) second AS `t`,count(0) AS `COUNT(*)` from `t1` group by `t1`.`id`,cast(`t1`.`d` as date) + interval time_to_sec(`t1`.`d`) second	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| id	t	COUNT(*)
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (i INT, j BIGINT);
 | ||
| INSERT INTO t1 VALUES (1, 2), (2, 2), (3, 2);
 | ||
| CREATE VIEW v1 AS SELECT MIN(j) AS j FROM t1;
 | ||
| CREATE VIEW v2 AS SELECT MIN(i) FROM t1 WHERE j = ( SELECT * FROM v1 );
 | ||
| SELECT * FROM v2;
 | ||
| MIN(i)
 | ||
| 1
 | ||
| DROP VIEW v2, v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1(
 | ||
| fName varchar(25) NOT NULL,
 | ||
| lName varchar(25) NOT NULL,
 | ||
| DOB date NOT NULL,
 | ||
| test_date date NOT NULL,
 | ||
| uID int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY);
 | ||
| INSERT INTO t1(fName, lName, DOB, test_date) VALUES
 | ||
| ('Hank', 'Hill', '1964-09-29', '2007-01-01'),
 | ||
| ('Tom', 'Adams', '1908-02-14', '2007-01-01'),
 | ||
| ('Homer', 'Simpson', '1968-03-05', '2007-01-01');
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT (year(test_date)-year(DOB)) AS Age
 | ||
| FROM t1 HAVING Age < 75;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select year(`t1`.`test_date`) - year(`t1`.`DOB`) AS `Age` from `t1` having `Age` < 75	latin1	latin1_swedish_ci
 | ||
| SELECT (year(test_date)-year(DOB)) AS Age FROM t1 HAVING Age < 75;
 | ||
| Age
 | ||
| 43
 | ||
| 39
 | ||
| SELECT * FROM v1;
 | ||
| Age
 | ||
| 43
 | ||
| 39
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a char(6) DEFAULT 'xxx');
 | ||
| INSERT INTO t1(id) VALUES (1), (2), (3), (4);
 | ||
| INSERT INTO t1 VALUES (5,'yyy'), (6,'yyy');
 | ||
| SELECT * FROM t1;
 | ||
| id	a
 | ||
| 1	xxx
 | ||
| 2	xxx
 | ||
| 3	xxx
 | ||
| 4	xxx
 | ||
| 5	yyy
 | ||
| 6	yyy
 | ||
| CREATE VIEW v1(a, m) AS SELECT a, MIN(id) FROM t1 GROUP BY a;
 | ||
| SELECT * FROM v1;
 | ||
| a	m
 | ||
| xxx	1
 | ||
| yyy	5
 | ||
| CREATE TABLE t2 SELECT * FROM v1;
 | ||
| INSERT INTO t2(m) VALUES (0);
 | ||
| SELECT * FROM t2;
 | ||
| a	m
 | ||
| xxx	1
 | ||
| yyy	5
 | ||
| xxx	0
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| CREATE TABLE t1 (id int PRIMARY KEY, e ENUM('a','b') NOT NULL DEFAULT 'b');
 | ||
| INSERT INTO t1(id) VALUES (1), (2), (3);
 | ||
| INSERT INTO t1 VALUES (4,'a');
 | ||
| SELECT * FROM t1;
 | ||
| id	e
 | ||
| 1	b
 | ||
| 2	b
 | ||
| 3	b
 | ||
| 4	a
 | ||
| CREATE VIEW v1(m, e) AS SELECT MIN(id), e FROM t1 GROUP BY e;
 | ||
| CREATE TABLE t2 SELECT * FROM v1;
 | ||
| SELECT * FROM t2;
 | ||
| m	e
 | ||
| 4	a
 | ||
| 1	b
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL);
 | ||
| CREATE VIEW v1 AS SELECT a, b FROM t1;
 | ||
| INSERT IGNORE INTO v1 (b) VALUES (2);
 | ||
| Warnings:
 | ||
| Warning	1423	Field of view 'test.v1' underlying table doesn't have a default value
 | ||
| SET SQL_MODE = STRICT_ALL_TABLES;
 | ||
| INSERT INTO v1 (b) VALUES (4);
 | ||
| ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
 | ||
| SET SQL_MODE = '';
 | ||
| SELECT * FROM t1;
 | ||
| a	b
 | ||
| 0	2
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (firstname text, surname text);
 | ||
| INSERT INTO t1 VALUES
 | ||
| ("Bart","Simpson"),("Milhouse","van Houten"),("Montgomery","Burns");
 | ||
| CREATE VIEW v1 AS SELECT CONCAT(firstname," ",surname) AS name FROM t1;
 | ||
| SELECT CONCAT(LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," ")),
 | ||
| LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," "))) AS f1
 | ||
| FROM v1;
 | ||
| f1
 | ||
| BartBart
 | ||
| Milhouse vanMilhouse van
 | ||
| MontgomeryMontgomery
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (i int, j int);
 | ||
| CREATE VIEW v1 AS SELECT COALESCE(i,j) FROM t1;
 | ||
| DESCRIBE v1;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| COALESCE(i,j)	int(11)	YES		NULL	
 | ||
| CREATE TABLE t2 SELECT COALESCE(i,j) FROM t1;
 | ||
| DESCRIBE t2;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| COALESCE(i,j)	int(11)	YES		NULL	
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| CREATE TABLE t1 (s varchar(10));
 | ||
| INSERT INTO t1 VALUES ('yadda'), ('yady');
 | ||
| SELECT TRIM(BOTH 'y' FROM s) FROM t1;
 | ||
| TRIM(BOTH 'y' FROM s)
 | ||
| adda
 | ||
| ad
 | ||
| CREATE VIEW v1 AS SELECT TRIM(BOTH 'y' FROM s) FROM t1;
 | ||
| SELECT * FROM v1;
 | ||
| TRIM(BOTH 'y' FROM s)
 | ||
| adda
 | ||
| ad
 | ||
| DROP VIEW v1;
 | ||
| SELECT TRIM(LEADING 'y' FROM s) FROM t1;
 | ||
| TRIM(LEADING 'y' FROM s)
 | ||
| adda
 | ||
| ady
 | ||
| CREATE VIEW v1 AS SELECT TRIM(LEADING 'y' FROM s) FROM t1;
 | ||
| SELECT * FROM v1;
 | ||
| TRIM(LEADING 'y' FROM s)
 | ||
| adda
 | ||
| ady
 | ||
| DROP VIEW v1;
 | ||
| SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
 | ||
| TRIM(TRAILING 'y' FROM s)
 | ||
| yadda
 | ||
| yad
 | ||
| CREATE VIEW v1 AS SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
 | ||
| SELECT * FROM v1;
 | ||
| TRIM(TRAILING 'y' FROM s)
 | ||
| yadda
 | ||
| yad
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (x INT, y INT);
 | ||
| CREATE ALGORITHM=TEMPTABLE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `v1` AS select `t1`.`x` AS `x` from `t1`	latin1	latin1_swedish_ci
 | ||
| ALTER VIEW v1 AS SELECT x, y FROM t1;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `v1` AS select `t1`.`x` AS `x`,`t1`.`y` AS `y` from `t1`	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (s1 char);
 | ||
| INSERT INTO t1 VALUES ('Z');
 | ||
| CREATE VIEW v1 AS SELECT s1 collate latin1_german1_ci AS col FROM t1;
 | ||
| CREATE VIEW v2 (col) AS SELECT s1 collate latin1_german1_ci FROM t1;
 | ||
| INSERT INTO v1 (col) VALUES ('b');
 | ||
| INSERT INTO v2 (col) VALUES ('c');
 | ||
| SELECT s1 FROM t1;
 | ||
| s1
 | ||
| Z
 | ||
| b
 | ||
| c
 | ||
| DROP VIEW v1, v2;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (id INT);
 | ||
| CREATE VIEW v1 AS SELECT id FROM t1;
 | ||
| SHOW TABLES;
 | ||
| Tables_in_test
 | ||
| t1
 | ||
| v1
 | ||
| DROP VIEW v2,v1;
 | ||
| ERROR 42S02: Unknown VIEW: 'test.v2'
 | ||
| SHOW TABLES;
 | ||
| Tables_in_test
 | ||
| t1
 | ||
| CREATE VIEW v1 AS SELECT id FROM t1;
 | ||
| DROP VIEW t1,v1;
 | ||
| ERROR 42S02: Unknown VIEW: 'test.t1'
 | ||
| show warnings;
 | ||
| Level	Code	Message
 | ||
| Warning	1347	'test.t1' is not of type 'VIEW'
 | ||
| Error	4092	Unknown VIEW: 'test.t1'
 | ||
| SHOW TABLES;
 | ||
| Tables_in_test
 | ||
| t1
 | ||
| DROP TABLE t1;
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| set GLOBAL sql_mode="";
 | ||
| set LOCAL sql_mode="";
 | ||
| CREATE DATABASE bug21261DB;
 | ||
| USE bug21261DB;
 | ||
| connect  root,localhost,root,,bug21261DB;
 | ||
| connection root;
 | ||
| CREATE TABLE t1 (x INT);
 | ||
| CREATE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1;
 | ||
| GRANT INSERT, UPDATE ON v1 TO 'user21261'@'localhost';
 | ||
| GRANT INSERT, UPDATE ON t1 TO 'user21261'@'localhost';
 | ||
| CREATE TABLE t2 (y INT);
 | ||
| GRANT SELECT ON t2 TO 'user21261'@'localhost';
 | ||
| connect  user21261, localhost, user21261,, bug21261DB;
 | ||
| connection user21261;
 | ||
| INSERT INTO v1 (x) VALUES (5);
 | ||
| UPDATE v1 SET x=1;
 | ||
| connection root;
 | ||
| GRANT SELECT ON v1 TO 'user21261'@'localhost';
 | ||
| GRANT SELECT ON t1 TO 'user21261'@'localhost';
 | ||
| connection user21261;
 | ||
| UPDATE v1,t2 SET x=1 WHERE x=y;
 | ||
| connection root;
 | ||
| SELECT * FROM t1;
 | ||
| x
 | ||
| 1
 | ||
| REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user21261'@'localhost';
 | ||
| DROP USER 'user21261'@'localhost';
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| DROP DATABASE bug21261DB;
 | ||
| connection default;
 | ||
| USE test;
 | ||
| disconnect root;
 | ||
| disconnect user21261;
 | ||
| set GLOBAL sql_mode=default;
 | ||
| set LOCAL sql_mode=default;
 | ||
| create table t1 (f1 datetime);
 | ||
| create view v1 as select * from t1 where f1 between now() and now() + interval 1 minute;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` where `t1`.`f1` between current_timestamp() and current_timestamp() + interval 1 minute	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| DROP VIEW IF EXISTS v2;
 | ||
| CREATE TABLE t1(a INT, b INT);
 | ||
| CREATE DEFINER=longer_than_80_456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789@localhost
 | ||
| VIEW v1 AS SELECT a FROM t1;
 | ||
| ERROR HY000: String 'longer_than_80_4567890123456789012345678901234567890123456789012345...' is too long for user name (should be no longer than 128)
 | ||
| CREATE DEFINER=some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYsome_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYabcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY
 | ||
| VIEW v2 AS SELECT b FROM t1;
 | ||
| ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTYa...' is too long for host name (should be no longer than 255)
 | ||
| DROP TABLE t1;
 | ||
| DROP FUNCTION IF EXISTS f1;
 | ||
| DROP FUNCTION IF EXISTS f2;
 | ||
| DROP VIEW IF EXISTS v1, v2;
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| CREATE TABLE t1 (i INT);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| CREATE FUNCTION f1() RETURNS INT
 | ||
| BEGIN
 | ||
| INSERT INTO v1 VALUES (0);
 | ||
| RETURN 0;
 | ||
| END |
 | ||
| SELECT f1();
 | ||
| f1()
 | ||
| 0
 | ||
| CREATE ALGORITHM=TEMPTABLE VIEW v2 AS SELECT * FROM t1;
 | ||
| CREATE FUNCTION f2() RETURNS INT
 | ||
| BEGIN
 | ||
| INSERT INTO v2 VALUES (0);
 | ||
| RETURN 0;
 | ||
| END |
 | ||
| SELECT f2();
 | ||
| ERROR HY000: The target table v2 of the INSERT is not insertable-into
 | ||
| DROP FUNCTION f1;
 | ||
| DROP FUNCTION f2;
 | ||
| DROP VIEW v1, v2;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (s1 int);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| EXPLAIN SELECT * FROM t1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	system	NULL	NULL	NULL	NULL	0	Const row not found
 | ||
| EXPLAIN SELECT * FROM v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	system	NULL	NULL	NULL	NULL	0	Const row not found
 | ||
| INSERT INTO t1 VALUES (1), (3), (2);
 | ||
| EXPLAIN SELECT * FROM t1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	t	ALL	NULL	NULL	NULL	NULL	3	Using where
 | ||
| 2	SUBQUERY	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	3	Using where
 | ||
| 2	SUBQUERY	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| create table t1 (s1 int);
 | ||
| create view v1 as select s1 as a, s1 as b from t1;
 | ||
| insert into v1 values (1,1);
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| update v1 set a = 5;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1(pk int PRIMARY KEY);
 | ||
| CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int);
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS
 | ||
| SELECT t1.*
 | ||
| FROM t1 JOIN t2
 | ||
| ON t2.fk = t1.pk AND
 | ||
| t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org);
 | ||
| SHOW WARNINGS;
 | ||
| Level	Code	Message
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`pk` AS `pk` from (`t1` join `t2` on(`t2`.`fk` = `t1`.`pk` and `t2`.`ver` = (select max(`t`.`ver`) from `t2` `t` where `t`.`org` = `t2`.`org`)))	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1, t2;
 | ||
| DROP FUNCTION IF EXISTS f1;
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| CREATE TABLE t1 (i INT);
 | ||
| INSERT INTO t1 VALUES (1);
 | ||
| CREATE VIEW v1 AS SELECT MAX(i) FROM t1;
 | ||
| CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
 | ||
| SET NEW.i = (SELECT * FROM v1) + 1;
 | ||
| INSERT INTO t1 VALUES (1);
 | ||
| CREATE FUNCTION f1() RETURNS INT RETURN (SELECT * FROM v1);
 | ||
| UPDATE t1 SET i= f1();
 | ||
| DROP FUNCTION f1;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT UNSIGNED NOT NULL);
 | ||
| CREATE VIEW v1 AS SELECT id, val FROM t1 WHERE val >= 1 AND val <= 5 WITH CHECK OPTION;
 | ||
| INSERT INTO v1 (val) VALUES (2);
 | ||
| INSERT INTO v1 (val) VALUES (4);
 | ||
| INSERT INTO v1 (val) VALUES (6);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| UPDATE v1 SET val=6 WHERE id=2;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| DROP VIEW IF EXISTS v1, v2;
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| CREATE TABLE t1 (i INT AUTO_INCREMENT PRIMARY KEY, j INT);
 | ||
| CREATE VIEW v1 AS SELECT j FROM t1;
 | ||
| CREATE VIEW v2 AS SELECT * FROM t1;
 | ||
| INSERT INTO t1 (j) VALUES (1);
 | ||
| SELECT LAST_INSERT_ID();
 | ||
| LAST_INSERT_ID()
 | ||
| 1
 | ||
| INSERT INTO v1 (j) VALUES (2);
 | ||
| # LAST_INSERT_ID() should not change.
 | ||
| SELECT LAST_INSERT_ID();
 | ||
| LAST_INSERT_ID()
 | ||
| 1
 | ||
| INSERT INTO v2 (j) VALUES (3);
 | ||
| # LAST_INSERT_ID() should be updated.
 | ||
| SELECT LAST_INSERT_ID();
 | ||
| LAST_INSERT_ID()
 | ||
| 3
 | ||
| INSERT INTO v1 (j) SELECT j FROM t1;
 | ||
| # LAST_INSERT_ID() should not change.
 | ||
| SELECT LAST_INSERT_ID();
 | ||
| LAST_INSERT_ID()
 | ||
| 3
 | ||
| SELECT * FROM t1;
 | ||
| i	j
 | ||
| 1	1
 | ||
| 2	2
 | ||
| 3	3
 | ||
| 4	1
 | ||
| 5	2
 | ||
| 6	3
 | ||
| DROP VIEW v1, v2;
 | ||
| DROP TABLE t1;
 | ||
| CREATE VIEW v AS SELECT !0 * 5 AS x FROM DUAL;
 | ||
| SHOW CREATE VIEW v;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select !0 * 5 AS `x`	latin1	latin1_swedish_ci
 | ||
| SELECT !0 * 5 AS x FROM DUAL;
 | ||
| x
 | ||
| 5
 | ||
| SELECT * FROM v;
 | ||
| x
 | ||
| 5
 | ||
| DROP VIEW v;
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| CREATE VIEW v1 AS SELECT 'The\ZEnd';
 | ||
| SELECT * FROM v1;
 | ||
| TheEnd
 | ||
| TheEnd
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'The\ZEnd' AS `TheEnd`	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| CREATE TABLE t1 (mydate DATETIME);
 | ||
| INSERT INTO t1 VALUES
 | ||
| ('2007-01-01'), ('2007-01-02'), ('2007-01-30'), ('2007-01-31');
 | ||
| CREATE VIEW v1 AS SELECT mydate from t1;
 | ||
| SELECT * FROM t1 WHERE mydate BETWEEN '2007-01-01' AND '2007-01-31';
 | ||
| mydate
 | ||
| 2007-01-01 00:00:00
 | ||
| 2007-01-02 00:00:00
 | ||
| 2007-01-30 00:00:00
 | ||
| 2007-01-31 00:00:00
 | ||
| SELECT * FROM v1 WHERE mydate BETWEEN '2007-01-01' AND '2007-01-31';
 | ||
| mydate
 | ||
| 2007-01-01 00:00:00
 | ||
| 2007-01-02 00:00:00
 | ||
| 2007-01-30 00:00:00
 | ||
| 2007-01-31 00:00:00
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (a int);
 | ||
| CREATE TABLE t2 (b int);
 | ||
| INSERT INTO t1 VALUES (1), (2);
 | ||
| INSERT INTO t2 VALUES (1), (2);
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT t2.b FROM t1,t2 WHERE t1.a = t2.b WITH CHECK OPTION;
 | ||
| SELECT * FROM v1;
 | ||
| b
 | ||
| 1
 | ||
| 2
 | ||
| UPDATE v1 SET b=3;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| SELECT * FROM v1;
 | ||
| b
 | ||
| 1
 | ||
| 2
 | ||
| SELECT * FROM t1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| SELECT * FROM t2;
 | ||
| b
 | ||
| 1
 | ||
| 2
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| create table t1(f1 int, f2 int);
 | ||
| insert into t1 values(1,2),(1,3),(1,1),(2,3),(2,1),(2,2);
 | ||
| select * from t1;
 | ||
| f1	f2
 | ||
| 1	2
 | ||
| 1	3
 | ||
| 1	1
 | ||
| 2	3
 | ||
| 2	1
 | ||
| 2	2
 | ||
| create view v1 as select * from t1 order by f2;
 | ||
| select * from v1;
 | ||
| f1	f2
 | ||
| 1	1
 | ||
| 2	1
 | ||
| 1	2
 | ||
| 2	2
 | ||
| 1	3
 | ||
| 2	3
 | ||
| explain extended select * from v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	Using filesort
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`f1` AS `f1`,`test`.`t1`.`f2` AS `f2` from `test`.`t1` order by `test`.`t1`.`f2`
 | ||
| select * from v1 order by f1;
 | ||
| f1	f2
 | ||
| 1	2
 | ||
| 1	3
 | ||
| 1	1
 | ||
| 2	3
 | ||
| 2	1
 | ||
| 2	2
 | ||
| explain extended select * from v1 order by f1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	Using filesort
 | ||
| Warnings:
 | ||
| Note	1926	View 'test'.'v1' ORDER BY clause ignored because there is other ORDER BY clause already
 | ||
| Note	1003	select `test`.`t1`.`f1` AS `f1`,`test`.`t1`.`f2` AS `f2` from `test`.`t1` order by `test`.`t1`.`f1`
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (
 | ||
| id int(11) NOT NULL PRIMARY KEY,
 | ||
| country varchar(32),
 | ||
| code int(11) default NULL
 | ||
| );
 | ||
| INSERT INTO t1 VALUES
 | ||
| (1,'ITALY',100),(2,'ITALY',200),(3,'FRANCE',100), (4,'ITALY',100);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT code, COUNT(DISTINCT country) FROM t1 GROUP BY code ORDER BY MAX(id);
 | ||
| code	COUNT(DISTINCT country)
 | ||
| 200	1
 | ||
| 100	2
 | ||
| SELECT code, COUNT(DISTINCT country) FROM v1 GROUP BY code ORDER BY MAX(id);
 | ||
| code	COUNT(DISTINCT country)
 | ||
| 200	1
 | ||
| 100	2
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| SELECT * FROM (SELECT 1) AS t into @w;
 | ||
| CREATE VIEW v1 AS SELECT * FROM (SELECT 1) AS t into @w;
 | ||
| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'into @w' at line 1
 | ||
| # Previously the following would fail.
 | ||
| SELECT * FROM (SELECT 1) AS t into @w;
 | ||
| drop view if exists view_24532_a;
 | ||
| drop view if exists view_24532_b;
 | ||
| drop table if exists table_24532;
 | ||
| create table table_24532 (
 | ||
| a int,
 | ||
| b bigint,
 | ||
| c int(4),
 | ||
| d bigint(48)
 | ||
| );
 | ||
| create view view_24532_a as
 | ||
| select
 | ||
| a IS TRUE,
 | ||
| a IS NOT TRUE,
 | ||
| a IS FALSE,
 | ||
| a IS NOT FALSE,
 | ||
| a IS UNKNOWN,
 | ||
| a IS NOT UNKNOWN,
 | ||
| a is NULL,
 | ||
| a IS NOT NULL,
 | ||
| ISNULL(a),
 | ||
| b IS TRUE,
 | ||
| b IS NOT TRUE,
 | ||
| b IS FALSE,
 | ||
| b IS NOT FALSE,
 | ||
| b IS UNKNOWN,
 | ||
| b IS NOT UNKNOWN,
 | ||
| b is NULL,
 | ||
| b IS NOT NULL,
 | ||
| ISNULL(b),
 | ||
| c IS TRUE,
 | ||
| c IS NOT TRUE,
 | ||
| c IS FALSE,
 | ||
| c IS NOT FALSE,
 | ||
| c IS UNKNOWN,
 | ||
| c IS NOT UNKNOWN,
 | ||
| c is NULL,
 | ||
| c IS NOT NULL,
 | ||
| ISNULL(c),
 | ||
| d IS TRUE,
 | ||
| d IS NOT TRUE,
 | ||
| d IS FALSE,
 | ||
| d IS NOT FALSE,
 | ||
| d IS UNKNOWN,
 | ||
| d IS NOT UNKNOWN,
 | ||
| d is NULL,
 | ||
| d IS NOT NULL,
 | ||
| ISNULL(d)
 | ||
| from table_24532;
 | ||
| describe view_24532_a;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| a IS TRUE	int(1)	NO		0	
 | ||
| a IS NOT TRUE	int(1)	NO		0	
 | ||
| a IS FALSE	int(1)	NO		0	
 | ||
| a IS NOT FALSE	int(1)	NO		0	
 | ||
| a IS UNKNOWN	int(1)	NO		0	
 | ||
| a IS NOT UNKNOWN	int(1)	NO		0	
 | ||
| a is NULL	int(1)	NO		0	
 | ||
| a IS NOT NULL	int(1)	NO		0	
 | ||
| ISNULL(a)	int(1)	NO		0	
 | ||
| b IS TRUE	int(1)	NO		0	
 | ||
| b IS NOT TRUE	int(1)	NO		0	
 | ||
| b IS FALSE	int(1)	NO		0	
 | ||
| b IS NOT FALSE	int(1)	NO		0	
 | ||
| b IS UNKNOWN	int(1)	NO		0	
 | ||
| b IS NOT UNKNOWN	int(1)	NO		0	
 | ||
| b is NULL	int(1)	NO		0	
 | ||
| b IS NOT NULL	int(1)	NO		0	
 | ||
| ISNULL(b)	int(1)	NO		0	
 | ||
| c IS TRUE	int(1)	NO		0	
 | ||
| c IS NOT TRUE	int(1)	NO		0	
 | ||
| c IS FALSE	int(1)	NO		0	
 | ||
| c IS NOT FALSE	int(1)	NO		0	
 | ||
| c IS UNKNOWN	int(1)	NO		0	
 | ||
| c IS NOT UNKNOWN	int(1)	NO		0	
 | ||
| c is NULL	int(1)	NO		0	
 | ||
| c IS NOT NULL	int(1)	NO		0	
 | ||
| ISNULL(c)	int(1)	NO		0	
 | ||
| d IS TRUE	int(1)	NO		0	
 | ||
| d IS NOT TRUE	int(1)	NO		0	
 | ||
| d IS FALSE	int(1)	NO		0	
 | ||
| d IS NOT FALSE	int(1)	NO		0	
 | ||
| d IS UNKNOWN	int(1)	NO		0	
 | ||
| d IS NOT UNKNOWN	int(1)	NO		0	
 | ||
| d is NULL	int(1)	NO		0	
 | ||
| d IS NOT NULL	int(1)	NO		0	
 | ||
| ISNULL(d)	int(1)	NO		0	
 | ||
| create view view_24532_b as
 | ||
| select
 | ||
| a IS TRUE,
 | ||
| if(ifnull(a, 0), 1, 0) as old_istrue,
 | ||
| a IS NOT TRUE,
 | ||
| if(ifnull(a, 0), 0, 1) as old_isnottrue,
 | ||
| a IS FALSE,
 | ||
| if(ifnull(a, 1), 0, 1) as old_isfalse,
 | ||
| a IS NOT FALSE,
 | ||
| if(ifnull(a, 1), 1, 0) as old_isnotfalse
 | ||
| from table_24532;
 | ||
| describe view_24532_b;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| a IS TRUE	int(1)	NO		0	
 | ||
| old_istrue	int(1)	NO		0	
 | ||
| a IS NOT TRUE	int(1)	NO		0	
 | ||
| old_isnottrue	int(1)	NO		0	
 | ||
| a IS FALSE	int(1)	NO		0	
 | ||
| old_isfalse	int(1)	NO		0	
 | ||
| a IS NOT FALSE	int(1)	NO		0	
 | ||
| old_isnotfalse	int(1)	NO		0	
 | ||
| show create view view_24532_b;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| view_24532_b	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_24532_b` AS select `table_24532`.`a` is true AS `a IS TRUE`,if(ifnull(`table_24532`.`a`,0),1,0) AS `old_istrue`,`table_24532`.`a` is not true AS `a IS NOT TRUE`,if(ifnull(`table_24532`.`a`,0),0,1) AS `old_isnottrue`,`table_24532`.`a` is false AS `a IS FALSE`,if(ifnull(`table_24532`.`a`,1),0,1) AS `old_isfalse`,`table_24532`.`a` is not false AS `a IS NOT FALSE`,if(ifnull(`table_24532`.`a`,1),1,0) AS `old_isnotfalse` from `table_24532`	latin1	latin1_swedish_ci
 | ||
| insert into table_24532 values (0, 0, 0, 0);
 | ||
| select * from view_24532_b;
 | ||
| a IS TRUE	old_istrue	a IS NOT TRUE	old_isnottrue	a IS FALSE	old_isfalse	a IS NOT FALSE	old_isnotfalse
 | ||
| 0	0	1	1	1	1	0	0
 | ||
| update table_24532 set a=1;
 | ||
| select * from view_24532_b;
 | ||
| a IS TRUE	old_istrue	a IS NOT TRUE	old_isnottrue	a IS FALSE	old_isfalse	a IS NOT FALSE	old_isnotfalse
 | ||
| 1	1	0	0	0	0	1	1
 | ||
| update table_24532 set a=NULL;
 | ||
| select * from view_24532_b;
 | ||
| a IS TRUE	old_istrue	a IS NOT TRUE	old_isnottrue	a IS FALSE	old_isfalse	a IS NOT FALSE	old_isnotfalse
 | ||
| 0	0	1	1	0	0	1	1
 | ||
| drop view view_24532_a;
 | ||
| drop view view_24532_b;
 | ||
| drop table table_24532;
 | ||
| CREATE TABLE t1 (
 | ||
| lid int NOT NULL PRIMARY KEY,
 | ||
| name char(10) NOT NULL
 | ||
| );
 | ||
| INSERT INTO t1 (lid, name) VALUES
 | ||
| (1, 'YES'), (2, 'NO');
 | ||
| CREATE TABLE t2 (
 | ||
| id int NOT NULL PRIMARY KEY,
 | ||
| gid int NOT NULL,
 | ||
| lid int NOT NULL,
 | ||
| dt date
 | ||
| );
 | ||
| INSERT INTO t2 (id, gid, lid, dt) VALUES
 | ||
| (1, 1, 1, '2007-01-01'),(2, 1, 2, '2007-01-02'),
 | ||
| (3, 2, 2, '2007-02-01'),(4, 2, 1, '2007-02-02');
 | ||
| SELECT DISTINCT t2.gid AS lgid,
 | ||
| (SELECT t1.name FROM t1, t2
 | ||
| WHERE t1.lid  = t2.lid AND t2.gid = lgid
 | ||
| ORDER BY t2.dt DESC LIMIT 1
 | ||
| ) as clid
 | ||
| FROM t2;
 | ||
| lgid	clid
 | ||
| 1	NO
 | ||
| 2	YES
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT DISTINCT t2.gid AS lgid,
 | ||
| (SELECT t1.name FROM t1, t2
 | ||
| WHERE t1.lid  = t2.lid AND t2.gid = lgid
 | ||
| ORDER BY t2.dt DESC LIMIT 1
 | ||
| ) as clid
 | ||
| FROM t2;
 | ||
| SELECT * FROM v1;
 | ||
| lgid	clid
 | ||
| 1	NO
 | ||
| 2	YES
 | ||
| DROP VIEW v1;
 | ||
| DROP table t1,t2;
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| INSERT INTO t1 VALUES (1),(2),(3);
 | ||
| CREATE VIEW v1 AS SELECT a FROM t1 ORDER BY a;
 | ||
| SELECT * FROM t1 UNION SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| EXPLAIN SELECT * FROM t1 UNION SELECT * FROM v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| 2	UNION	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| NULL	UNION RESULT	<union1,2>	ALL	NULL	NULL	NULL	NULL	NULL	
 | ||
| SELECT * FROM v1 UNION SELECT * FROM t1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| EXPLAIN SELECT * FROM v1 UNION SELECT * FROM t1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| 2	UNION	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| NULL	UNION RESULT	<union1,2>	ALL	NULL	NULL	NULL	NULL	NULL	
 | ||
| SELECT * FROM t1 UNION SELECT * FROM v1 ORDER BY a;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| EXPLAIN SELECT * FROM t1 UNION SELECT * FROM v1 ORDER BY a;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| 2	UNION	t1	ALL	NULL	NULL	NULL	NULL	3	
 | ||
| NULL	UNION RESULT	<union1,2>	ALL	NULL	NULL	NULL	NULL	NULL	Using filesort
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE VIEW v1 AS SELECT CAST( 1.23456789 AS DECIMAL( 7,5 ) ) AS col;
 | ||
| SELECT * FROM v1;
 | ||
| col
 | ||
| 1.23457
 | ||
| DESCRIBE v1;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| col	decimal(7,5)	NO		0.00000	
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT CAST(1.23456789 AS DECIMAL(8,0)) AS col;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(1.23456789 as decimal(8,0)) AS `col`	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| CREATE TABLE t2 (b INT, c INT DEFAULT 0);
 | ||
| INSERT INTO t1 (a) VALUES (1), (2);
 | ||
| INSERT INTO t2 (b) VALUES (1), (2);
 | ||
| CREATE VIEW v1 AS SELECT t2.b,t2.c FROM t1, t2
 | ||
| WHERE t1.a=t2.b AND t2.b < 3 WITH CHECK OPTION;
 | ||
| SELECT * FROM v1;
 | ||
| b	c
 | ||
| 1	0
 | ||
| 2	0
 | ||
| UPDATE v1 SET c=1 WHERE b=1;
 | ||
| SELECT * FROM v1;
 | ||
| b	c
 | ||
| 1	1
 | ||
| 2	0
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| CREATE TABLE t1 (id int);
 | ||
| CREATE TABLE t2 (id int, c int DEFAULT 0);
 | ||
| INSERT INTO t1 (id) VALUES (1);
 | ||
| INSERT INTO t2 (id) VALUES (1);
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT t2.c FROM t1, t2
 | ||
| WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION;
 | ||
| UPDATE v1 SET c=1;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| CREATE TABLE t1 (a1 INT, c INT DEFAULT 0);
 | ||
| CREATE TABLE t2 (a2 INT);
 | ||
| CREATE TABLE t3 (a3 INT);
 | ||
| CREATE TABLE t4 (a4 INT);
 | ||
| INSERT INTO t1 (a1) VALUES (1),(2);
 | ||
| INSERT INTO t2 (a2) VALUES (1),(2);
 | ||
| INSERT INTO t3 (a3) VALUES (1),(2);
 | ||
| INSERT INTO t4 (a4) VALUES (1),(2);
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT t1.a1, t1.c FROM t1 JOIN t2 ON t1.a1=t2.a2 AND t1.c < 3
 | ||
| WITH CHECK OPTION;
 | ||
| SELECT * FROM v1;
 | ||
| a1	c
 | ||
| 1	0
 | ||
| 2	0
 | ||
| UPDATE v1 SET c=3;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| PREPARE t FROM 'UPDATE v1 SET c=3';
 | ||
| EXECUTE t;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| EXECUTE t;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| INSERT INTO v1(a1, c) VALUES (3, 3);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v1`
 | ||
| UPDATE v1 SET c=1 WHERE a1=1;
 | ||
| SELECT * FROM v1;
 | ||
| a1	c
 | ||
| 1	1
 | ||
| 2	0
 | ||
| SELECT * FROM t1;
 | ||
| a1	c
 | ||
| 1	1
 | ||
| 2	0
 | ||
| CREATE VIEW v2 AS SELECT t1.a1, t1.c
 | ||
| FROM (t1 JOIN t2 ON t1.a1=t2.a2 AND t1.c < 3)
 | ||
| JOIN (t3 JOIN t4 ON t3.a3=t4.a4)
 | ||
| ON t2.a2=t3.a3 WITH CHECK OPTION;
 | ||
| SELECT * FROM v2;
 | ||
| a1	c
 | ||
| 1	1
 | ||
| 2	0
 | ||
| UPDATE v2 SET c=3;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| PREPARE t FROM 'UPDATE v2 SET c=3';
 | ||
| EXECUTE t;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| EXECUTE t;
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| INSERT INTO v2(a1, c) VALUES (3, 3);
 | ||
| ERROR 44000: CHECK OPTION failed `test`.`v2`
 | ||
| UPDATE v2 SET c=2 WHERE a1=1;
 | ||
| SELECT * FROM v2;
 | ||
| a1	c
 | ||
| 1	2
 | ||
| 2	0
 | ||
| SELECT * FROM t1;
 | ||
| a1	c
 | ||
| 1	2
 | ||
| 2	0
 | ||
| DROP VIEW v1,v2;
 | ||
| DROP TABLE t1,t2,t3,t4;
 | ||
| CREATE TABLE t1 (a int, b int);
 | ||
| INSERT INTO t1 VALUES (1,2), (2,2), (1,3), (1,2);
 | ||
| CREATE VIEW v1 AS SELECT a, b+1 as b FROM t1;
 | ||
| SELECT b, SUM(a) FROM v1 WHERE b=3 GROUP BY b;
 | ||
| b	SUM(a)
 | ||
| 3	4
 | ||
| EXPLAIN SELECT b, SUM(a) FROM v1 WHERE b=3 GROUP BY b;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	4	Using where
 | ||
| SELECT a, SUM(b) FROM v1 WHERE b=3 GROUP BY a;
 | ||
| a	SUM(b)
 | ||
| 1	6
 | ||
| 2	3
 | ||
| EXPLAIN SELECT a, SUM(b) FROM v1 WHERE b=3 GROUP BY a;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	4	Using where; Using temporary; Using filesort
 | ||
| SELECT a, SUM(b) FROM v1 WHERE a=1 GROUP BY a;
 | ||
| a	SUM(b)
 | ||
| 1	10
 | ||
| EXPLAIN SELECT a, SUM(b) FROM v1 WHERE a=1 GROUP BY a;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	4	Using where
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (
 | ||
| person_id int NOT NULL PRIMARY KEY,
 | ||
| username varchar(40) default NULL,
 | ||
| status_flg char(1) NOT NULL default 'A'
 | ||
| );
 | ||
| CREATE TABLE t2 (
 | ||
| person_role_id int NOT NULL auto_increment PRIMARY KEY,
 | ||
| role_id int NOT NULL,
 | ||
| person_id int NOT NULL,
 | ||
| INDEX idx_person_id (person_id),
 | ||
| INDEX idx_role_id (role_id)
 | ||
| );
 | ||
| CREATE TABLE t3 (
 | ||
| role_id int NOT NULL auto_increment PRIMARY KEY,
 | ||
| role_name varchar(100) default NULL,
 | ||
| app_name varchar(40) NOT NULL,
 | ||
| INDEX idx_app_name(app_name)
 | ||
| );
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT profile.person_id AS person_id
 | ||
| FROM t1 profile, t2 userrole, t3 role
 | ||
| WHERE userrole.person_id = profile.person_id AND
 | ||
| role.role_id = userrole.role_id AND
 | ||
| profile.status_flg = 'A'
 | ||
|   ORDER BY profile.person_id,role.app_name,role.role_name;
 | ||
| INSERT INTO  t1 VALUES
 | ||
| (6,'Sw','A'), (-1136332546,'ols','e'), (0,'    *\n','0'),
 | ||
| (-717462680,'ENTS Ta','0'), (-904346964,'ndard SQL\n','0');
 | ||
| INSERT INTO t2 VALUES
 | ||
| (1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10);
 | ||
| INSERT INTO t3 VALUES
 | ||
| (1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'),
 | ||
| (3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'),
 | ||
| (5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'),
 | ||
| (7,'SOC_USER','SOCCANS'),(8,'CAYIT_USER','CAYITCANS'),
 | ||
| (9,'RTOS_DCFSPOS_SUPERVISOR','RTOS');
 | ||
| EXPLAIN SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	profile	const	PRIMARY	PRIMARY	4	const	1	Using temporary; Using filesort
 | ||
| 1	SIMPLE	userrole	ref	idx_person_id,idx_role_id	idx_person_id	4	const	2	
 | ||
| 1	SIMPLE	role	eq_ref	PRIMARY	PRIMARY	4	test.userrole.role_id	1	
 | ||
| SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6;
 | ||
| a	b
 | ||
| 6	6
 | ||
| 6	6
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2,t3;
 | ||
| create table t1 (i int);
 | ||
| insert into t1 values (1), (2), (1), (3), (2), (4);
 | ||
| create view v1 as select distinct i from t1;
 | ||
| select * from v1;
 | ||
| i
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| 4
 | ||
| select table_name, is_updatable from information_schema.views
 | ||
| where table_name = 'v1';
 | ||
| table_name	is_updatable
 | ||
| v1	NO
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| INSERT INTO t1 VALUES (1),(2);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT * FROM v1 USE KEY(non_existant);
 | ||
| ERROR 42000: Key 'non_existant' doesn't exist in table 'v1'
 | ||
| SELECT * FROM v1 FORCE KEY(non_existant);
 | ||
| ERROR 42000: Key 'non_existant' doesn't exist in table 'v1'
 | ||
| SELECT * FROM v1 IGNORE KEY(non_existant);
 | ||
| ERROR 42000: Key 'non_existant' doesn't exist in table 'v1'
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0,
 | ||
| PRIMARY KEY(a), KEY (b));
 | ||
| INSERT INTO t1 VALUES (),(),(),(),(),(),(),(),(),(),(),(),(),(),();
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 FORCE KEY (PRIMARY,b) ORDER BY a;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` FORCE INDEX (PRIMARY) FORCE INDEX (`b`) order by `t1`.`a`	latin1	latin1_swedish_ci
 | ||
| EXPLAIN SELECT * FROM v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	index	NULL	PRIMARY	4	NULL	15	
 | ||
| CREATE VIEW v2 AS SELECT * FROM t1 USE KEY () ORDER BY a;
 | ||
| SHOW CREATE VIEW v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` USE INDEX () order by `t1`.`a`	latin1	latin1_swedish_ci
 | ||
| EXPLAIN SELECT * FROM v2;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	15	Using filesort
 | ||
| CREATE VIEW v3 AS SELECT * FROM t1 IGNORE KEY (b) ORDER BY a;
 | ||
| SHOW CREATE VIEW v3;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` IGNORE INDEX (`b`) order by `t1`.`a`	latin1	latin1_swedish_ci
 | ||
| EXPLAIN SELECT * FROM v3;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	15	Using filesort
 | ||
| DROP VIEW v1;
 | ||
| DROP VIEW v2;
 | ||
| DROP VIEW v3;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#29477 Not all fields of the target table were checked to have
 | ||
| #           a default value when inserting into a view.
 | ||
| #
 | ||
| create table t1(f1 int, f2 int not null);
 | ||
| create view v1 as select f1 from t1;
 | ||
| insert ignore into v1 values(1);
 | ||
| Warnings:
 | ||
| Warning	1423	Field of view 'test.v1' underlying table doesn't have a default value
 | ||
| set @old_mode=@@sql_mode;
 | ||
| set @@sql_mode=traditional;
 | ||
| insert into v1 values(1);
 | ||
| ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
 | ||
| set @@sql_mode=@old_mode;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| create table t1 (a int, key(a));
 | ||
| create table t2 (c int);
 | ||
| create view v1 as select a b from t1;
 | ||
| create view v2 as select 1 a from t2, v1 where c in
 | ||
| (select 1 from t1 where b = a);
 | ||
| insert into t1 values (1), (1);
 | ||
| insert into t2 values (1), (1);
 | ||
| prepare stmt from "select * from v2 where a = 1";
 | ||
| execute stmt;
 | ||
| a
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| drop view v1, v2;
 | ||
| drop table t1, t2;
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| CREATE VIEW v1 AS SELECT p.a AS a FROM t1 p, t1 q;
 | ||
| INSERT INTO t1 VALUES (1), (1);
 | ||
| SELECT MAX(a), COUNT(DISTINCT a) FROM v1 GROUP BY a;
 | ||
| MAX(a)	COUNT(DISTINCT a)
 | ||
| 1	1
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- Bug#34337 Server crash when Altering a view using a table name.
 | ||
| # -----------------------------------------------------------------
 | ||
| 
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| 
 | ||
| CREATE TABLE t1(c1 INT);
 | ||
| 
 | ||
| SELECT * FROM t1;
 | ||
| c1
 | ||
| ALTER ALGORITHM=TEMPTABLE SQL SECURITY INVOKER VIEW t1 (c2) AS SELECT (1);
 | ||
| ERROR HY000: 'test.t1' is not of type 'VIEW'
 | ||
| 
 | ||
| DROP TABLE t1;
 | ||
| 
 | ||
| # -- End of test case for Bug#34337.
 | ||
| 
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- Bug#35193 VIEW query is rewritten without "FROM DUAL",
 | ||
| # --           causing syntax error
 | ||
| # -----------------------------------------------------------------
 | ||
| 
 | ||
| CREATE VIEW v1 AS SELECT 1 FROM DUAL WHERE 1;
 | ||
| 
 | ||
| SELECT * FROM v1;
 | ||
| 1
 | ||
| 1
 | ||
| SHOW CREATE TABLE v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` from DUAL  where 1	latin1	latin1_swedish_ci
 | ||
| 
 | ||
| DROP VIEW v1;
 | ||
| 
 | ||
| # -- End of test case for Bug#35193.
 | ||
| 
 | ||
| CREATE VIEW v1 AS SELECT 1;
 | ||
| DROP VIEW v1;
 | ||
| CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2));
 | ||
| INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
 | ||
| SELECT * FROM t1 USE INDEX (PRIMARY) WHERE c1=2;
 | ||
| c1	c2
 | ||
| 2	2
 | ||
| SELECT * FROM t1 USE INDEX (c2) WHERE c2=2;
 | ||
| c1	c2
 | ||
| 2	2
 | ||
| CREATE VIEW v1 AS SELECT c1, c2 FROM t1;
 | ||
| SHOW INDEX FROM v1;
 | ||
| Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_comment	Ignored
 | ||
| SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2;
 | ||
| ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1'
 | ||
| SELECT * FROM v1 FORCE INDEX (PRIMARY) WHERE c1=2;
 | ||
| ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1'
 | ||
| SELECT * FROM v1 IGNORE INDEX (PRIMARY) WHERE c1=2;
 | ||
| ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1'
 | ||
| SELECT * FROM v1 USE INDEX (c2) WHERE c2=2;
 | ||
| ERROR 42000: Key 'c2' doesn't exist in table 'v1'
 | ||
| SELECT * FROM v1 FORCE INDEX (c2) WHERE c2=2;
 | ||
| ERROR 42000: Key 'c2' doesn't exist in table 'v1'
 | ||
| SELECT * FROM v1 IGNORE INDEX (c2) WHERE c2=2;
 | ||
| ERROR 42000: Key 'c2' doesn't exist in table 'v1'
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| # 
 | ||
| # Bug #45806 crash when replacing into a view with a join!
 | ||
| # 
 | ||
| CREATE TABLE t1(a INT UNIQUE);
 | ||
| CREATE VIEW v1 AS SELECT t1.a FROM t1, t1 AS a;
 | ||
| INSERT INTO t1 VALUES (1), (2);
 | ||
| REPLACE INTO v1(a) SELECT 1 FROM t1,t1 AS c;
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 1
 | ||
| 2
 | ||
| REPLACE INTO v1(a) SELECT 3 FROM t1,t1 AS c;
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| DELETE FROM t1 WHERE a=3;
 | ||
| INSERT INTO v1(a) SELECT 1 FROM t1,t1 AS c
 | ||
| ON DUPLICATE KEY UPDATE `v1`.`a`= 1;
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 1
 | ||
| 2
 | ||
| CREATE VIEW v2 AS SELECT t1.a FROM t1, v1 AS a;
 | ||
| REPLACE INTO v2(a) SELECT 1 FROM t1,t1 AS c;
 | ||
| SELECT * FROM v2 order by 1;
 | ||
| a
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| REPLACE INTO v2(a) SELECT 3 FROM t1,t1 AS c;
 | ||
| SELECT * FROM v2 order by 1;
 | ||
| a
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| INSERT INTO v2(a) SELECT 1 FROM t1,t1 AS c
 | ||
| ON DUPLICATE KEY UPDATE `v2`.`a`= 1;
 | ||
| SELECT * FROM v2 order by 1;
 | ||
| a
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 1
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| 3
 | ||
| DROP VIEW v1;
 | ||
| DROP VIEW v2;
 | ||
| DROP TABLE t1;
 | ||
| # -- End of test case for Bug#45806
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- Bug#40825: Error 1356 while selecting from a view 
 | ||
| # --            with a "HAVING" clause though query works
 | ||
| # -----------------------------------------------------------------
 | ||
| 
 | ||
| CREATE TABLE t1 (c INT);
 | ||
| 
 | ||
| CREATE VIEW v1 (view_column) AS SELECT c AS alias FROM t1 HAVING alias;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`c` AS `view_column` from `t1` having `view_column` is true	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| view_column
 | ||
| 
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| 
 | ||
| # -- End of test case for Bug#40825
 | ||
| 
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- End of 5.0 tests.
 | ||
| # -----------------------------------------------------------------
 | ||
| DROP DATABASE IF EXISTS `d-1`;
 | ||
| CREATE DATABASE `d-1`;
 | ||
| USE `d-1`;
 | ||
| CREATE TABLE `t-1` (c1 INT);
 | ||
| CREATE VIEW  `v-1` AS SELECT c1 FROM `t-1`;
 | ||
| SHOW TABLES;
 | ||
| Tables_in_d-1
 | ||
| t-1
 | ||
| v-1
 | ||
| RENAME TABLE `t-1` TO `t-2`;
 | ||
| RENAME TABLE `v-1` TO `v-2`;
 | ||
| SHOW TABLES;
 | ||
| Tables_in_d-1
 | ||
| t-2
 | ||
| v-2
 | ||
| DROP TABLE `t-2`;
 | ||
| DROP VIEW  `v-2`;
 | ||
| DROP DATABASE `d-1`;
 | ||
| USE test;
 | ||
| 
 | ||
| #
 | ||
| # Bug#26676 VIEW using old table schema in a session.
 | ||
| #
 | ||
| 
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| CREATE TABLE t1(c1 INT, c2 INT);
 | ||
| INSERT INTO t1 VALUES (1, 2), (3, 4);
 | ||
| 
 | ||
| SELECT * FROM t1;
 | ||
| c1	c2
 | ||
| 1	2
 | ||
| 3	4
 | ||
| 
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| 
 | ||
| SELECT * FROM v1;
 | ||
| c1	c2
 | ||
| 1	2
 | ||
| 3	4
 | ||
| 
 | ||
| ALTER TABLE t1 ADD COLUMN c3 INT AFTER c2;
 | ||
| 
 | ||
| SELECT * FROM t1;
 | ||
| c1	c2	c3
 | ||
| 1	2	NULL
 | ||
| 3	4	NULL
 | ||
| 
 | ||
| SELECT * FROM v1;
 | ||
| c1	c2
 | ||
| 1	2
 | ||
| 3	4
 | ||
| 
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`c1` AS `c1`,`t1`.`c2` AS `c2` from `t1`	latin1	latin1_swedish_ci
 | ||
| 
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| 
 | ||
| # End of test case for Bug#26676.
 | ||
| 
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- Bug#32538 View definition picks up character set, but not collation
 | ||
| # -----------------------------------------------------------------
 | ||
| 
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| 
 | ||
| SET collation_connection = latin1_general_ci;
 | ||
| CREATE VIEW v1 AS SELECT _latin1 'text1' AS c1, 'text2' AS c2;
 | ||
| 
 | ||
| SELECT COLLATION(c1), COLLATION(c2) FROM v1;
 | ||
| COLLATION(c1)	COLLATION(c2)
 | ||
| latin1_swedish_ci	latin1_general_ci
 | ||
| 
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _latin1'text1' AS `c1`,'text2' AS `c2`	latin1	latin1_general_ci
 | ||
| 
 | ||
| SELECT * FROM v1 WHERE c1 = 'text1';
 | ||
| ERROR HY000: Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (latin1_general_ci,COERCIBLE) for operation '='
 | ||
| 
 | ||
| SELECT * FROM v1 WHERE c2 = 'text2';
 | ||
| c1	c2
 | ||
| text1	text2
 | ||
| 
 | ||
| use test;
 | ||
| SET names latin1;
 | ||
| 
 | ||
| SELECT COLLATION(c1), COLLATION(c2) FROM v1;
 | ||
| COLLATION(c1)	COLLATION(c2)
 | ||
| latin1_swedish_ci	latin1_general_ci
 | ||
| 
 | ||
| SELECT * FROM v1 WHERE c1 = 'text1';
 | ||
| c1	c2
 | ||
| text1	text2
 | ||
| 
 | ||
| SELECT * FROM v1 WHERE c2 = 'text2';
 | ||
| ERROR HY000: Illegal mix of collations (latin1_general_ci,COERCIBLE) and (latin1_swedish_ci,COERCIBLE) for operation '='
 | ||
| 
 | ||
| DROP VIEW v1;
 | ||
| 
 | ||
| # -- End of test case for Bug#32538.
 | ||
| 
 | ||
| drop view if exists a;
 | ||
| drop procedure if exists p;
 | ||
| create procedure p()
 | ||
| begin
 | ||
| declare continue handler for sqlexception begin end;
 | ||
| create view a as select 1;
 | ||
| end|
 | ||
| call p();
 | ||
| call p();
 | ||
| drop view a;
 | ||
| drop procedure p;
 | ||
| #
 | ||
| # Bug #44860: ALTER TABLE on view crashes server
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| CREATE VIEW v1 AS SELECT a FROM t1;
 | ||
| ALTER TABLE v1;
 | ||
| ERROR HY000: 'test.v1' is not of type 'BASE TABLE'
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#48449: hang on show create view after upgrading when
 | ||
| #            view contains function of view
 | ||
| #
 | ||
| DROP VIEW IF EXISTS v1,v2;
 | ||
| DROP TABLE IF EXISTS t1,t2;
 | ||
| DROP FUNCTION IF EXISTS f1;
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| CREATE TABLE t2 (a INT);
 | ||
| CREATE FUNCTION f1() RETURNS INT
 | ||
| BEGIN
 | ||
| SELECT a FROM v2 INTO @a;
 | ||
| RETURN @a;
 | ||
| END//
 | ||
| # Trigger pre-locking when opening v2.
 | ||
| CREATE VIEW v1 AS SELECT f1() FROM t1;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `f1`() AS `f1()` from `t1`	latin1	latin1_swedish_ci
 | ||
| Warnings:
 | ||
| Note	1599	View `test`.`v2` has no creation context
 | ||
| DROP VIEW v1,v2;
 | ||
| DROP TABLE t1,t2;
 | ||
| DROP FUNCTION f1;
 | ||
| CREATE TABLE t1(f1 INT);
 | ||
| INSERT INTO t1 VALUES ();
 | ||
| CREATE VIEW v1 AS SELECT 1 FROM t1 WHERE
 | ||
| ROW(1,1) >= ROW(1, (SELECT 1 FROM t1 WHERE  f1 >= ANY ( SELECT '1' )));
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#52120 create view cause Assertion failed: 0, file .\item_subselect.cc, line 817
 | ||
| #
 | ||
| CREATE TABLE t1 (a CHAR(1) CHARSET latin1, b CHAR(1) CHARSET utf8);
 | ||
| CREATE VIEW v1 AS SELECT 1 from t1
 | ||
| WHERE t1.b <=> (SELECT a FROM t1 WHERE a < SOME(SELECT '1'));
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#57703 create view cause Assertion failed: 0, file .\item_subselect.cc, line 846
 | ||
| #
 | ||
| CREATE TABLE t1(a int);
 | ||
| CREATE VIEW v1 AS SELECT 1 FROM t1 GROUP BY
 | ||
| SUBSTRING(1 FROM (SELECT 3 FROM t1 WHERE a >= ANY(SELECT 1)));
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#57352 valgrind warnings when creating view
 | ||
| #
 | ||
| CREATE VIEW v1 AS SELECT 1 IN (1 LIKE 2,0) AS f;
 | ||
| DROP VIEW v1;
 | ||
| #
 | ||
| # Bug 11829681 - 60295: ERROR 1356 ON VIEW THAT EXECUTES FINE AS A QUERY
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| CREATE VIEW v1 AS SELECT s.* FROM t1 s, t1 b HAVING a;
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # LP BUG#777809 (a retrograded condition for view ON)
 | ||
| #
 | ||
| CREATE TABLE t1 ( f1 int NOT NULL , f6 int NOT NULL ) ;
 | ||
| INSERT IGNORE INTO t1 VALUES (20, 2);
 | ||
| CREATE TABLE t2 ( f3 int NOT NULL ) ;
 | ||
| INSERT IGNORE INTO t2 VALUES (7);
 | ||
| CREATE OR REPLACE VIEW v2 AS SELECT * FROM t2;
 | ||
| PREPARE prep_stmt FROM 'SELECT t1.f6 FROM t1 RIGHT JOIN v2 ON v2.f3 WHERE t1.f1 != 0';
 | ||
| EXECUTE prep_stmt;
 | ||
| f6
 | ||
| 2
 | ||
| EXECUTE prep_stmt;
 | ||
| f6
 | ||
| 2
 | ||
| drop view v2;
 | ||
| drop table t1,t2;
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- End of 5.1 tests.
 | ||
| # -----------------------------------------------------------------
 | ||
| #
 | ||
| # Bug #794005: crash in st_table::mark_virtual_columns_for_write
 | ||
| #
 | ||
| CREATE TABLE t1 (a int);
 | ||
| insert into t1 values (1);
 | ||
| CREATE TABLE t2 (a int);
 | ||
| insert into t2 values (1);
 | ||
| CREATE VIEW v2 AS SELECT * FROM t2;
 | ||
| CREATE VIEW v1 AS SELECT * FROM v2;
 | ||
| CREATE VIEW v3 AS SELECT t2.a,v1.a as b FROM t2,v1 where t2.a=v1.a;
 | ||
| CREATE OR REPLACE ALGORITHM = TEMPTABLE VIEW v2 AS SELECT * FROM t1;
 | ||
| UPDATE v1 SET a = 10;
 | ||
| ERROR HY000: The target table v1 of the UPDATE is not updatable
 | ||
| REPLACE v1 SET a = 10;
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| INSERT into v1 values (20);
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| DELETE from v1;
 | ||
| ERROR HY000: The target table v1 of the DELETE is not updatable
 | ||
| UPDATE v3 SET b= 10;
 | ||
| ERROR HY000: The target table v3 of the UPDATE is not updatable
 | ||
| REPLACE v3 SET b= 10;
 | ||
| ERROR HY000: The target table v3 of the INSERT is not insertable-into
 | ||
| INSERT into v3(b) values (20);
 | ||
| ERROR HY000: The target table v3 of the INSERT is not insertable-into
 | ||
| DELETE from v3 where b=20;
 | ||
| ERROR HY000: Can not delete from join view 'test.v3'
 | ||
| DELETE from v3 where a=20;
 | ||
| ERROR HY000: Can not delete from join view 'test.v3'
 | ||
| DELETE v1 from v1,t1 where v1.a=t1.a;
 | ||
| ERROR HY000: The target table v1 of the DELETE is not updatable
 | ||
| UPDATE v3 SET a = 10;
 | ||
| REPLACE v3 SET a = 11;
 | ||
| INSERT INTO v3(a) values (20);
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| select * from t2;
 | ||
| a
 | ||
| 10
 | ||
| 11
 | ||
| 20
 | ||
| CREATE OR REPLACE ALGORITHM = MERGE VIEW v2 AS SELECT * FROM t2;
 | ||
| DELETE from v1 where a=11;
 | ||
| DELETE v1 from v1,t1 where v1.a=t1.a;
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| select * from t2;
 | ||
| a
 | ||
| 10
 | ||
| 20
 | ||
| DROP VIEW v1,v2,v3;
 | ||
| DROP TABLE t1,t2;
 | ||
| #
 | ||
| # MDEV-6251: SIGSEGV in query optimizer (in set_check_materialized 
 | ||
| # with MERGE view)
 | ||
| #
 | ||
| CREATE TABLE t1 (a1 INT(11) NOT NULL DEFAULT NULL AUTO_INCREMENT PRIMARY KEY);
 | ||
| CREATE TABLE t2 (b1 INT(11) NOT NULL DEFAULT NULL AUTO_INCREMENT PRIMARY KEY);
 | ||
| CREATE TABLE t3 (c1 INT(11) NOT NULL DEFAULT NULL AUTO_INCREMENT PRIMARY KEY);
 | ||
| CREATE TABLE t4 (d1 INT(11) NOT NULL DEFAULT NULL AUTO_INCREMENT PRIMARY KEY);
 | ||
| CREATE TABLE t5 (e1 INT(11) NOT NULL DEFAULT NULL AUTO_INCREMENT PRIMARY KEY);
 | ||
| CREATE TABLE t6 (f1 INT(11) NOT NULL DEFAULT NULL AUTO_INCREMENT PRIMARY KEY);
 | ||
| CREATE OR REPLACE view v1 AS
 | ||
| SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ;
 | ||
| SELECT 1
 | ||
| FROM ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t1)
 | ||
| LEFT OUTER JOIN ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t2) ON 1=1
 | ||
| LEFT OUTER JOIN ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t3) ON 1=1
 | ||
| LEFT OUTER JOIN ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t4) ON 1=1
 | ||
| LEFT OUTER JOIN ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t5) ON 1=1
 | ||
| LEFT OUTER JOIN ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t6) ON 1=1
 | ||
| LEFT OUTER JOIN ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t7) ON 1=1
 | ||
| LEFT OUTER JOIN ((  SELECT 1
 | ||
| FROM t1 a_alias_1
 | ||
| LEFT JOIN (t2 b_alias_1 JOIN t1 a_alias_2) ON b_alias_1.b1 = a_alias_1.a1 AND a_alias_2.a1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_1 ON c_alias_1.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t4 d_alias_1 ON d_alias_1.d1 = a_alias_1.a1
 | ||
| LEFT JOIN t3 c_alias_2 ON c_alias_2.c1 = a_alias_1.a1
 | ||
| LEFT JOIN t5 e_alias_1 ON e_alias_1.e1 = a_alias_1.a1
 | ||
| LEFT JOIN t6 f_alias_1 ON f_alias_1.f1 = a_alias_1.a1
 | ||
| ) t8) ON 1=1
 | ||
| ;
 | ||
| 1
 | ||
| SELECT 1
 | ||
| FROM (v1 t1)
 | ||
| LEFT OUTER JOIN (v1 t2) ON 1=1
 | ||
| LEFT OUTER JOIN (v1 t3) ON 1=1
 | ||
| LEFT OUTER JOIN (v1 t4) ON 1=1
 | ||
| LEFT OUTER JOIN (v1 t5) ON 1=1
 | ||
| LEFT OUTER JOIN (v1 t6) ON 1=1
 | ||
| LEFT OUTER JOIN (v1 t7) ON 1=1
 | ||
| LEFT OUTER JOIN (v1 t8) ON 1=1
 | ||
| ;
 | ||
| 1
 | ||
| drop view v1;
 | ||
| drop table t1,t2,t3,t4,t5,t6;
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- End of 5.2 tests.
 | ||
| # -----------------------------------------------------------------
 | ||
| #
 | ||
| # Bug #59696 Optimizer does not use equalities for conditions over view 
 | ||
| #
 | ||
| CREATE TABLE t1 (a int NOT NULL);
 | ||
| INSERT INTO t1 VALUES 
 | ||
| (9), (2), (8), (1), (3), (4), (2), (5),
 | ||
| (9), (2), (8), (1), (3), (4), (2), (5);
 | ||
| CREATE TABLE t2 (pk int PRIMARY KEY, c int NOT NULL);
 | ||
| INSERT INTO t2 VALUES
 | ||
| (9,90), (16, 160), (11,110), (1,10), (18,180), (2,20),
 | ||
| (14,140), (15, 150), (12,120), (3,30), (17,170), (19,190);
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT t1.a,t2.c  FROM t1,t2 WHERE t2.pk = t1.a AND t2.pk > 8;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t2	ALL	PRIMARY	NULL	NULL	NULL	12	75.00	Using where
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	16	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`pk` and `test`.`t2`.`pk` > 8
 | ||
| FLUSH STATUS;
 | ||
| SELECT t1.a,t2.c  FROM t1,t2 WHERE t2.pk = t1.a AND t2.pk > 8;
 | ||
| a	c
 | ||
| 9	90
 | ||
| 9	90
 | ||
| SHOW STATUS LIKE 'Handler_read_%';
 | ||
| Variable_name	Value
 | ||
| Handler_read_first	0
 | ||
| Handler_read_key	0
 | ||
| Handler_read_last	0
 | ||
| Handler_read_next	0
 | ||
| Handler_read_prev	0
 | ||
| Handler_read_retry	0
 | ||
| Handler_read_rnd	0
 | ||
| Handler_read_rnd_deleted	0
 | ||
| Handler_read_rnd_next	30
 | ||
| analyze table t1,t2;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.t1	analyze	status	Engine-independent statistics collected
 | ||
| test.t1	analyze	status	OK
 | ||
| test.t2	analyze	status	Engine-independent statistics collected
 | ||
| test.t2	analyze	status	OK
 | ||
| explain extended SELECT t1.a,t2.c  FROM t1,t2 WHERE t2.pk = t1.a AND t2.pk > 8;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	16	12.50	Using where
 | ||
| 1	SIMPLE	t2	eq_ref	PRIMARY	PRIMARY	4	test.t1.a	1	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t2`.`pk` = `test`.`t1`.`a` and `test`.`t1`.`a` > 8
 | ||
| CREATE VIEW v AS SELECT * FROM t2;
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT t1.a,v.c  FROM t1,v WHERE v.pk = t1.a AND v.pk > 8;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t2	ALL	PRIMARY	NULL	NULL	NULL	12	75.00	Using where
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	16	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`pk` and `test`.`t2`.`pk` > 8
 | ||
| FLUSH STATUS;
 | ||
| SELECT t1.a,v.c  FROM t1,v WHERE v.pk = t1.a AND v.pk > 8;
 | ||
| a	c
 | ||
| 9	90
 | ||
| 9	90
 | ||
| SHOW STATUS LIKE 'Handler_read_%';
 | ||
| Variable_name	Value
 | ||
| Handler_read_first	0
 | ||
| Handler_read_key	0
 | ||
| Handler_read_last	0
 | ||
| Handler_read_next	0
 | ||
| Handler_read_prev	0
 | ||
| Handler_read_retry	0
 | ||
| Handler_read_rnd	0
 | ||
| Handler_read_rnd_deleted	0
 | ||
| Handler_read_rnd_next	30
 | ||
| set statement optimizer_where_cost=100 FOR explain extended SELECT t1.a,v.c  FROM t1,v WHERE v.pk = t1.a AND v.pk > 8;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	16	100.00	Using where
 | ||
| 1	SIMPLE	t2	eq_ref	PRIMARY	PRIMARY	4	test.t1.a	1	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t2`.`pk` = `test`.`t1`.`a` and `test`.`t1`.`a` > 8
 | ||
| DROP VIEW v;
 | ||
| DROP TABLE t1, t2;
 | ||
| #
 | ||
| # Bug#702403: crash with multiple equalities and a view
 | ||
| #
 | ||
| CREATE TABLE t1 (a int);
 | ||
| INSERT INTO t1 VALUES (10);
 | ||
| CREATE TABLE t2 (pk int PRIMARY KEY, b int, INDEX idx (b));
 | ||
| INSERT INTO t2 VALUES (1,2), (3,4);
 | ||
| CREATE TABLE t3 (pk int PRIMARY KEY, b int, INDEX idx (b));
 | ||
| INSERT INTO t3 VALUES (1,2), (3,4);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| EXPLAIN 
 | ||
| SELECT * FROM v1, t2, t3 
 | ||
| WHERE t3.pk = v1.a AND t2.b = 1 AND t2.b = t3.pk AND v1.a BETWEEN 2 AND 5;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
 | ||
| SELECT * FROM v1, t2, t3 
 | ||
| WHERE t3.pk = v1.a AND t2.b = 1 AND t2.b = t3.pk AND v1.a BETWEEN 2 AND 5;
 | ||
| a	pk	b	pk	b
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1, t2, t3;
 | ||
| #
 | ||
| # Bug#717577: substitution for best field in a query over a view and
 | ||
| #             with OR in the WHERE condition 
 | ||
| #
 | ||
| create table t1 (a int, b int);
 | ||
| insert into t1 values (2,4), (1,3);
 | ||
| create table t2 (c int);
 | ||
| insert into t2 values (6), (4), (1), (3), (8), (3), (4), (2);
 | ||
| select * from t1,t2 where t2.c=t1.a and t2.c < 3 or t2.c=t1.b and t2.c >=4;
 | ||
| a	b	c
 | ||
| 2	4	4
 | ||
| 1	3	1
 | ||
| 2	4	4
 | ||
| 2	4	2
 | ||
| explain extended
 | ||
| select * from t1,t2 where t2.c=t1.a and t2.c < 3 or t2.c=t1.b and t2.c >=4;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	8	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t2`.`c` = `test`.`t1`.`a` and `test`.`t1`.`a` < 3 or `test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t1`.`b` >= 4
 | ||
| create view v1 as select * from t2;
 | ||
| select * from t1,v1 where v1.c=t1.a and v1.c < 3 or v1.c=t1.b and v1.c >=4;
 | ||
| a	b	c
 | ||
| 2	4	4
 | ||
| 1	3	1
 | ||
| 2	4	4
 | ||
| 2	4	2
 | ||
| explain extended
 | ||
| select * from t1,v1 where v1.c=t1.a and v1.c < 3 or v1.c=t1.b and v1.c >=4;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	8	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t2`.`c` = `test`.`t1`.`a` and `test`.`t1`.`a` < 3 or `test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t1`.`b` >= 4
 | ||
| create view v2 as select * from v1;
 | ||
| select * from t1,v2 where v2.c=t1.a and v2.c < 3 or v2.c=t1.b and v2.c >=4;
 | ||
| a	b	c
 | ||
| 2	4	4
 | ||
| 1	3	1
 | ||
| 2	4	4
 | ||
| 2	4	2
 | ||
| explain extended
 | ||
| select * from t1,v2 where v2.c=t1.a and v2.c < 3 or v2.c=t1.b and v2.c >=4;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	8	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t2`.`c` = `test`.`t1`.`a` and `test`.`t1`.`a` < 3 or `test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t1`.`b` >= 4
 | ||
| create view v3 as select * from t1;
 | ||
| select * from v3,v2 where v2.c=v3.a and v2.c < 3 or v2.c=v3.b and v2.c >=4;
 | ||
| a	b	c
 | ||
| 2	4	4
 | ||
| 1	3	1
 | ||
| 2	4	4
 | ||
| 2	4	2
 | ||
| explain extended
 | ||
| select * from v3,v2 where v2.c=v3.a and v2.c < 3 or v2.c=v3.b and v2.c >=4;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	8	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t1` join `test`.`t2` where `test`.`t2`.`c` = `test`.`t1`.`a` and `test`.`t1`.`a` < 3 or `test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t1`.`b` >= 4
 | ||
| drop view v1,v2,v3;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # Bug#724942: substitution of the constant into a view field
 | ||
| #              
 | ||
| CREATE TABLE t1 (a int);
 | ||
| INSERT INTO t1 VALUES (2), (9), (9), (6), (5), (4), (7);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT * FROM v1 WHERE a > -1 OR a > 6 AND a = 3;
 | ||
| a
 | ||
| 2
 | ||
| 9
 | ||
| 9
 | ||
| 6
 | ||
| 5
 | ||
| 4
 | ||
| 7
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM v1 WHERE a > -1 OR a > 6 AND a = 3;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	7	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > -1
 | ||
| SELECT * FROM v1 WHERE a > -1 OR a AND a = 0;
 | ||
| a
 | ||
| 2
 | ||
| 9
 | ||
| 9
 | ||
| 6
 | ||
| 5
 | ||
| 4
 | ||
| 7
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM v1 WHERE a > -1 OR a AND a = 0;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	7	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > -1
 | ||
| CREATE VIEW v2 AS SELECT * FROM v1;
 | ||
| SELECT * FROM v2 WHERE a > -1 OR a AND a = 0;
 | ||
| a
 | ||
| 2
 | ||
| 9
 | ||
| 9
 | ||
| 6
 | ||
| 5
 | ||
| 4
 | ||
| 7
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM v2 WHERE a > -1 OR a AND a = 0;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	7	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > -1
 | ||
| DROP VIEW v1,v2;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (a varchar(10), KEY (a)) ;
 | ||
| INSERT INTO t1 VALUES
 | ||
| ('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'), ('MM'),
 | ||
| ('AA'), ('DD'), ('CC'), ('GG');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| # t1 and v1 should return the same result set
 | ||
| SELECT * FROM v1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
 | ||
| a
 | ||
| KK
 | ||
| MM
 | ||
| ZZ
 | ||
| ZZ
 | ||
| SELECT * FROM t1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
 | ||
| a
 | ||
| KK
 | ||
| MM
 | ||
| ZZ
 | ||
| ZZ
 | ||
| # t1 and v1 should propagate constants in the same way
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM v1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	13	NULL	4	100.00	Using where; Using index
 | ||
| Warnings:
 | ||
| Note	1105	Cannot use key `a` part[0] for lookup: `test`.`t1`.`a` of type `varchar` < "0" of type `int`
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > 'JJ' or `test`.`t1`.`a` = 'VV' and `test`.`t1`.`a` <> 0
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM t1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	13	NULL	4	100.00	Using where; Using index
 | ||
| Warnings:
 | ||
| Note	1105	Cannot use key `a` part[0] for lookup: `test`.`t1`.`a` of type `varchar` < "0" of type `int`
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > 'JJ' or `test`.`t1`.`a` = 'VV' and `test`.`t1`.`a` <> 0
 | ||
| # t1 and v1 should return the same result set
 | ||
| SELECT * FROM v1 WHERE a > 'JJ' OR a AND a = 'VV';
 | ||
| a
 | ||
| KK
 | ||
| MM
 | ||
| ZZ
 | ||
| ZZ
 | ||
| SELECT * FROM t1 WHERE a > 'JJ' OR a AND a = 'VV';
 | ||
| a
 | ||
| KK
 | ||
| MM
 | ||
| ZZ
 | ||
| ZZ
 | ||
| # t1 and v1 should propagate constants in the same way
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM v1 WHERE a > 'JJ' OR a AND a = 'VV';
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	13	NULL	4	100.00	Using where; Using index
 | ||
| Warnings:
 | ||
| Note	1105	Cannot use key `a` part[0] for lookup: `test`.`t1`.`a` of type `varchar` < "0" of type `int`
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > 'JJ' or `test`.`t1`.`a` = 'VV' and `test`.`t1`.`a` <> 0
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM t1 WHERE a > 'JJ' OR a AND a = 'VV';
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	13	NULL	4	100.00	Using where; Using index
 | ||
| Warnings:
 | ||
| Note	1105	Cannot use key `a` part[0] for lookup: `test`.`t1`.`a` of type `varchar` < "0" of type `int`
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` > 'JJ' or `test`.`t1`.`a` = 'VV' and `test`.`t1`.`a` <> 0
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#777745: crash  with equality propagation 
 | ||
| #             over view fields
 | ||
| #
 | ||
| CREATE TABLE t1 (a int NOT NULL ) ;
 | ||
| INSERT INTO t1 VALUES (2), (1);
 | ||
| CREATE TABLE t2 (a int NOT NULL , b int NOT NULL) ;
 | ||
| INSERT INTO t2 VALUES (2,20),(2,30);
 | ||
| CREATE VIEW  v2 AS SELECT * FROM t2;
 | ||
| EXPLAIN
 | ||
| SELECT * FROM t1,v2 
 | ||
| WHERE v2.a = t1.a AND v2.a = 2 AND v2.a IS NULL AND t1.a != 0;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
 | ||
| SELECT * FROM t1,v2 
 | ||
| WHERE v2.a = t1.a AND v2.a = 2 AND v2.a IS NULL AND t1.a != 0;
 | ||
| a	a	b
 | ||
| EXPLAIN
 | ||
| SELECT * FROM t1,v2 
 | ||
| WHERE v2.a = t1.a AND v2.a = 2 AND v2.a+1 > 2 AND t1.a != 0;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	2	Using where; Using join buffer (flat, BNL join)
 | ||
| SELECT * FROM t1,v2 
 | ||
| WHERE v2.a = t1.a AND v2.a = 2 AND v2.a+1 > 2 AND t1.a != 0;
 | ||
| a	a	b
 | ||
| 2	2	20
 | ||
| 2	2	30
 | ||
| DROP VIEW v2;
 | ||
| DROP TABLE t1,t2;
 | ||
| #
 | ||
| # Bug#794038: crash  with INSERT/UPDATE/DELETE 
 | ||
| #             over a non-updatable view
 | ||
| #
 | ||
| CREATE TABLE t1 (a int);
 | ||
| CREATE ALGORITHM = TEMPTABLE VIEW v1 AS SELECT * FROM t1;
 | ||
| CREATE ALGORITHM = MERGE VIEW v2 AS SELECT * FROM v1;
 | ||
| CREATE ALGORITHM = TEMPTABLE VIEW v3 AS SELECT * FROM v2;
 | ||
| INSERT INTO v3 VALUES (1);
 | ||
| ERROR HY000: The target table v3 of the INSERT is not insertable-into
 | ||
| UPDATE v3 SET a=0;
 | ||
| ERROR HY000: The target table v3 of the UPDATE is not updatable
 | ||
| DELETE FROM v3;
 | ||
| ERROR HY000: The target table v3 of the DELETE is not updatable
 | ||
| DROP VIEW v1,v2,v3;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#798621: crash with a view string field equal  
 | ||
| #             to a constant
 | ||
| #
 | ||
| CREATE TABLE t1 (a varchar(32), b int) ;
 | ||
| INSERT INTO t1 VALUES ('j', NULL), ('c', 8), ('c', 1);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| CREATE TABLE t2 (a varchar(32)) ;
 | ||
| INSERT INTO t2 VALUES ('j'), ('c');
 | ||
| SELECT * FROM v1 LEFT JOIN t2 ON t2.a = v1.a 
 | ||
| WHERE v1.b = 1 OR v1.a = 'a' AND LENGTH(v1.a) >= v1.b;
 | ||
| a	b	a
 | ||
| c	1	c
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM v1 LEFT JOIN t2 ON t2.a = v1.a 
 | ||
| WHERE v1.b = 1 OR v1.a = 'a' AND LENGTH(v1.a) >= v1.b;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	3	100.00	Using where
 | ||
| 1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a` from `test`.`t1` left join `test`.`t2` on(`test`.`t2`.`a` = `test`.`t1`.`a`) where `test`.`t1`.`b` = 1 or `test`.`t1`.`a` = 'a' and octet_length(`test`.`t1`.`a`) >= `test`.`t1`.`b`
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| # Bug#798625: duplicate of the previous one, but without crash  
 | ||
| CREATE TABLE t1 (f1 int NOT NULL, f2 int, f3 int, f4 varchar(32), f5 int) ;
 | ||
| INSERT INTO t1 VALUES (20,5,2,'r', 0);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT v1.f4 FROM v1 
 | ||
| WHERE f1<>0 OR f2<>0 AND f4='v' AND (f2<>0 OR f3<>0 AND f5<>0 OR f4 LIKE '%b%');
 | ||
| f4
 | ||
| r
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT v1.f4 FROM v1 
 | ||
| WHERE f1<>0 OR f2<>0 AND f4='v' AND (f2<>0 OR f3<>0 AND f5<>0 OR f4 LIKE '%b%');
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	system	NULL	NULL	NULL	NULL	1	100.00	
 | ||
| Warnings:
 | ||
| Note	1003	select 'r' AS `f4` from dual where 1
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # Bug#798576: abort on a GROUP BY query over a view with left join 
 | ||
| #             that can be converted to inner join
 | ||
| #
 | ||
| CREATE TABLE t1 (a int NOT NULL , b int NOT NULL) ;
 | ||
| INSERT INTO t1 VALUES (214,0), (6,6), (6,0), (7,0);
 | ||
| CREATE TABLE t2 (b int) ;
 | ||
| INSERT INTO t2 VALUES (88), (78), (6);
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS 
 | ||
| SELECT t1.a, t2.b FROM (t2 LEFT JOIN t1 ON t2.b > t1.a) WHERE t1.b <= 0;
 | ||
| SELECT * FROM v1;
 | ||
| a	b
 | ||
| 6	88
 | ||
| 6	78
 | ||
| 7	88
 | ||
| 7	78
 | ||
| SELECT a, MIN(b) FROM v1 GROUP BY a;
 | ||
| a	MIN(b)
 | ||
| 6	78
 | ||
| 7	78
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2;
 | ||
| #
 | ||
| # LP bug #793386: unexpected 'Duplicate column name ''' error
 | ||
| #                 at the second execution of a PS using a view 
 | ||
| #
 | ||
| CREATE TABLE t1 (f1 int, f2 int, f3 int, f4 int);
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT t.f1, t.f2, s.f3, s.f4 FROM t1 t, t1 s
 | ||
| WHERE t.f4 >= s.f2 AND s.f3 < 0;
 | ||
| PREPARE stmt1 FROM 
 | ||
| "SELECT s.f1 AS f1, s.f2 AS f2, s.f3 AS f3, t.f4 AS f4
 | ||
|     FROM v1 AS t LEFT JOIN v1 AS s ON t.f4=s.f4 WHERE t.f2 <> 1225";
 | ||
| EXECUTE stmt1;
 | ||
| f1	f2	f3	f4
 | ||
| EXECUTE stmt1;
 | ||
| f1	f2	f3	f4
 | ||
| DEALLOCATE PREPARE stmt1;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # LP BUG#806071 (2 views with ORDER BY)
 | ||
| #
 | ||
| CREATE TABLE t1 (f1 int);
 | ||
| INSERT INTO t1 VALUES (1),(1);
 | ||
| CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT f1 FROM t1;
 | ||
| CREATE ALGORITHM=MERGE VIEW v2 AS SELECT f1 FROM v1 ORDER BY f1;
 | ||
| SELECT * FROM v2 AS a1, v2 AS a2;
 | ||
| f1	f1
 | ||
| 1	1
 | ||
| 1	1
 | ||
| 1	1
 | ||
| 1	1
 | ||
| EXPLAIN EXTENDED SELECT * FROM v2 AS a1, v2 AS a2;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	<derived3>	ALL	NULL	NULL	NULL	NULL	2	100.00	Using temporary; Using filesort
 | ||
| 1	PRIMARY	<derived5>	ALL	NULL	NULL	NULL	NULL	2	100.00	Using join buffer (flat, BNL join)
 | ||
| 5	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	
 | ||
| 3	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	
 | ||
| Warnings:
 | ||
| Note	1926	View 'test'.'v2' ORDER BY clause ignored because there is other ORDER BY clause already
 | ||
| Note	1003	/* select#1 */ select `v1`.`f1` AS `f1`,`v1`.`f1` AS `f1` from `test`.`v1` join `test`.`v1` order by `v1`.`f1`
 | ||
| DROP VIEW v1, v2;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # LP bug #823189: dependent subquery with RIGHT JOIN
 | ||
| #                 referencing view in WHERE
 | ||
| #
 | ||
| CREATE TABLE t1 (a varchar(32));
 | ||
| INSERT INTO t1 VALUES ('y'), ('w');
 | ||
| CREATE TABLE t2 (a int);
 | ||
| INSERT INTO t2 VALUES (10);
 | ||
| CREATE TABLE t3 (a varchar(32), b int);
 | ||
| CREATE TABLE t4 (a varchar(32));
 | ||
| INSERT INTO t4 VALUES ('y'), ('w');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM t1, t2
 | ||
| WHERE t2.a NOT IN (SELECT t3.b FROM t3 RIGHT JOIN t4 ON (t4.a = t3.a)
 | ||
| WHERE t4.a >= t1.a);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t2	system	NULL	NULL	NULL	NULL	1	100.00	
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 2	DEPENDENT SUBQUERY	t3	system	NULL	NULL	NULL	NULL	0	0.00	Const row not found
 | ||
| 2	DEPENDENT SUBQUERY	t4	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1
 | ||
| Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,10 AS `a` from `test`.`t1` where !<expr_cache><10,`test`.`t1`.`a`>(<in_optimizer>(10,<exists>(/* select#2 */ select NULL from `test`.`t4` where `test`.`t4`.`a` >= `test`.`t1`.`a` and trigcond(<cache>(10) = NULL or <cache>(NULL is null)) having trigcond(NULL is null))))
 | ||
| SELECT * FROM t1, t2
 | ||
| WHERE t2.a NOT IN (SELECT t3.b FROM t3 RIGHT JOIN t4 ON (t4.a = t3.a)
 | ||
| WHERE t4.a >= t1.a);
 | ||
| a	a
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM v1, t2
 | ||
| WHERE t2.a NOT IN (SELECT t3.b FROM t3 RIGHT JOIN t4 ON (t4.a = t3.a)
 | ||
| WHERE t4.a >= v1.a);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t2	system	NULL	NULL	NULL	NULL	1	100.00	
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 2	DEPENDENT SUBQUERY	t3	system	NULL	NULL	NULL	NULL	0	0.00	Const row not found
 | ||
| 2	DEPENDENT SUBQUERY	t4	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'v1.a' of SELECT #2 was resolved in SELECT #1
 | ||
| Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,10 AS `a` from `test`.`t1` where !<expr_cache><10,`test`.`t1`.`a`>(<in_optimizer>(10,<exists>(/* select#2 */ select NULL from `test`.`t4` where `test`.`t4`.`a` >= `test`.`t1`.`a` and trigcond(<cache>(10) = NULL or <cache>(NULL is null)) having trigcond(NULL is null))))
 | ||
| SELECT * FROM v1, t2
 | ||
| WHERE t2.a NOT IN (SELECT t3.b FROM t3 RIGHT JOIN t4 ON (t4.a = t3.a)
 | ||
| WHERE t4.a >= v1.a);
 | ||
| a	a
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2,t3,t4;
 | ||
| #
 | ||
| # LP bug #823237: dependent subquery with LEFT JOIN
 | ||
| #                 referencing view in WHERE
 | ||
| # (duplicate of LP bug #823189)
 | ||
| # 
 | ||
| CREATE TABLE t1 (a int);
 | ||
| CREATE TABLE t2 ( b int, d int, e int);
 | ||
| INSERT INTO t2 VALUES (7,8,0);
 | ||
| CREATE TABLE t3 ( c int);
 | ||
| INSERT INTO t3 VALUES (0);
 | ||
| CREATE TABLE t4 (a int, b int, c int);
 | ||
| INSERT INTO t4 VALUES (93,1,0), (95,NULL,0);
 | ||
| CREATE VIEW v4 AS SELECT * FROM t4;
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM t3 , t4 
 | ||
| WHERE t4.c <= (SELECT t2.e FROM t2 LEFT JOIN t1 ON ( t1.a = t2.d )
 | ||
| WHERE t2.b > t4.b);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t3	system	NULL	NULL	NULL	NULL	1	100.00	
 | ||
| 1	PRIMARY	t4	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 2	DEPENDENT SUBQUERY	t2	system	NULL	NULL	NULL	NULL	1	100.00	
 | ||
| 2	DEPENDENT SUBQUERY	t1	system	NULL	NULL	NULL	NULL	0	0.00	Const row not found
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'test.t4.b' of SELECT #2 was resolved in SELECT #1
 | ||
| Note	1003	/* select#1 */ select 0 AS `c`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c` from `test`.`t4` where `test`.`t4`.`c` <= <expr_cache><`test`.`t4`.`b`>((/* select#2 */ select 0 from dual where 7 > `test`.`t4`.`b`))
 | ||
| SELECT * FROM t3 , t4 
 | ||
| WHERE t4.c <= (SELECT t2.e FROM t2 LEFT JOIN t1 ON ( t1.a = t2.d )
 | ||
| WHERE t2.b > t4.b);
 | ||
| c	a	b	c
 | ||
| 0	93	1	0
 | ||
| EXPLAIN EXTENDED
 | ||
| SELECT * FROM t3, v4 
 | ||
| WHERE v4.c <= (SELECT t2.e FROM t2 LEFT JOIN t1 ON ( t1.a = t2.d )
 | ||
| WHERE t2.b > v4.b);
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t3	system	NULL	NULL	NULL	NULL	1	100.00	
 | ||
| 1	PRIMARY	t4	ALL	NULL	NULL	NULL	NULL	2	100.00	Using where
 | ||
| 2	DEPENDENT SUBQUERY	t2	system	NULL	NULL	NULL	NULL	1	100.00	
 | ||
| 2	DEPENDENT SUBQUERY	t1	system	NULL	NULL	NULL	NULL	0	0.00	Const row not found
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'v4.b' of SELECT #2 was resolved in SELECT #1
 | ||
| Note	1003	/* select#1 */ select 0 AS `c`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c` from `test`.`t4` where `test`.`t4`.`c` <= <expr_cache><`test`.`t4`.`b`>((/* select#2 */ select 0 from dual where 7 > `test`.`t4`.`b`))
 | ||
| SELECT * FROM t3, v4 
 | ||
| WHERE v4.c <= (SELECT t2.e FROM t2 LEFT JOIN t1 ON ( t1.a = t2.d )
 | ||
| WHERE t2.b > v4.b);
 | ||
| c	a	b	c
 | ||
| 0	93	1	0
 | ||
| DROP VIEW v4;
 | ||
| DROP TABLE t1,t2,t3,t4;
 | ||
| drop table if exists t_9801;
 | ||
| drop view if exists v_9801;
 | ||
| create table t_9801 (s1 int);
 | ||
| create view v_9801 as
 | ||
| select sum(s1) from t_9801 with check option;
 | ||
| ERROR HY000: CHECK OPTION on non-updatable view `test`.`v_9801`
 | ||
| create view v_9801 as
 | ||
| select sum(s1) from t_9801 group by s1 with check option;
 | ||
| ERROR HY000: CHECK OPTION on non-updatable view `test`.`v_9801`
 | ||
| create view v_9801 as
 | ||
| select sum(s1) from t_9801 group by s1 with rollup with check option;
 | ||
| ERROR HY000: CHECK OPTION on non-updatable view `test`.`v_9801`
 | ||
| drop table t_9801;
 | ||
| #
 | ||
| # Bug #47335 assert in get_table_share
 | ||
| #
 | ||
| DROP TABLE IF EXISTS t1;
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| CREATE TEMPORARY TABLE t1 (id INT);
 | ||
| ALTER VIEW t1 AS SELECT 1 AS f1;
 | ||
| ERROR 42S02: Table 'test.t1' doesn't exist
 | ||
| DROP TABLE t1;
 | ||
| CREATE VIEW v1 AS SELECT 1 AS f1;
 | ||
| CREATE TEMPORARY TABLE v1 (id INT);
 | ||
| ALTER VIEW v1 AS SELECT 2 AS f1;
 | ||
| DROP TABLE v1;
 | ||
| SELECT * FROM v1;
 | ||
| f1
 | ||
| 2
 | ||
| DROP VIEW v1;
 | ||
| #
 | ||
| # Bug #47635 assert in start_waiting_global_read_lock 
 | ||
| #            during CREATE VIEW
 | ||
| #
 | ||
| DROP TABLE IF EXISTS t1, t2;
 | ||
| DROP VIEW IF EXISTS t2;
 | ||
| CREATE TABLE t1 (f1 integer);
 | ||
| CREATE TEMPORARY TABLE IF NOT EXISTS t1 (f1 integer);
 | ||
| CREATE TEMPORARY TABLE t2 (f1 integer);
 | ||
| DROP TABLE t1;
 | ||
| FLUSH TABLES WITH READ LOCK;
 | ||
| CREATE VIEW t2 AS SELECT * FROM t1;
 | ||
| ERROR HY000: Can't execute the query because you have a conflicting read lock
 | ||
| UNLOCK TABLES;
 | ||
| DROP TABLE t1, t2;
 | ||
| #
 | ||
| # Bug#48315 Metadata lock is not taken for merged views that
 | ||
| #           use an INFORMATION_SCHEMA table
 | ||
| #
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| DROP PROCEDURE IF EXISTS p1;
 | ||
| connect  con2, localhost, root;
 | ||
| connect  con3, localhost, root;
 | ||
| connection default;
 | ||
| CREATE VIEW v1 AS SELECT schema_name FROM information_schema.schemata;
 | ||
| CREATE PROCEDURE p1() SELECT COUNT(*), GET_LOCK('blocker', 100) FROM v1;
 | ||
| # CALL p1() so the view is merged.
 | ||
| CALL p1();
 | ||
| SELECT RELEASE_LOCK('blocker');
 | ||
| RELEASE_LOCK('blocker')
 | ||
| 1
 | ||
| connection con3;
 | ||
| SELECT GET_LOCK('blocker', 100);
 | ||
| GET_LOCK('blocker', 100)
 | ||
| 1
 | ||
| connection default;
 | ||
| # Try to CALL p1() again, this time it should block on "blocker".
 | ||
| # Sending:
 | ||
| CALL p1();
 | ||
| connection con2;
 | ||
| # ... then try to drop the view. This should block.
 | ||
| # Sending:
 | ||
| DROP VIEW v1;
 | ||
| connection con3;
 | ||
| # Now allow CALL p1() to complete
 | ||
| SELECT RELEASE_LOCK('blocker');
 | ||
| RELEASE_LOCK('blocker')
 | ||
| 1
 | ||
| connection default;
 | ||
| # Reaping: CALL p1()
 | ||
| SELECT RELEASE_LOCK('blocker');
 | ||
| RELEASE_LOCK('blocker')
 | ||
| 1
 | ||
| connection con2;
 | ||
| # Reaping: DROP VIEW v1
 | ||
| connection default;
 | ||
| DROP PROCEDURE p1;
 | ||
| disconnect con2;
 | ||
| disconnect con3;
 | ||
| #
 | ||
| # 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'
 | ||
| #
 | ||
| # BUG#14117018 - MYSQL SERVER CREATES INVALID VIEW DEFINITION
 | ||
| # BUG#18405221 - SHOW CREATE VIEW OUTPUT INCORRECT
 | ||
| #
 | ||
| CREATE VIEW v1 AS (SELECT '' FROM DUAL);
 | ||
| CREATE VIEW v2 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
 | ||
| (SELECT '' FROM DUAL);
 | ||
| CREATE VIEW v3 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
 | ||
| (SELECT '' FROM DUAL) UNION ALL
 | ||
| (SELECT '' FROM DUAL);
 | ||
| CREATE VIEW v4 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
 | ||
| (SELECT '' AS col2 FROM DUAL) UNION ALL
 | ||
| (SELECT '' FROM DUAL);
 | ||
| CREATE VIEW v5 AS (SELECT 'buggy' AS col1, 'fix' as col2 FROM DUAL) UNION ALL
 | ||
| (SELECT 'buggy' as a, 'fix' as a FROM DUAL);
 | ||
| # Name for the column in select1 is set properly with or
 | ||
| # without this fix.
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS (select '' AS `Name_exp_1`)	latin1	latin1_swedish_ci
 | ||
| # Name for the column in select2 is set with this fix.
 | ||
| # Without this fix, name would not have set for the
 | ||
| # columns in select2.
 | ||
| SHOW CREATE VIEW v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS (select 'BUG#14117018' AS `col1`) union all (select '' AS `Name_exp_1`)	latin1	latin1_swedish_ci
 | ||
| # Name for the field item in select2 & select3 is set with this fix.
 | ||
| # Without this fix, name would not have set for the
 | ||
| # columns in select2 & select3.
 | ||
| SHOW CREATE VIEW v3;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS (select 'BUG#14117018' AS `col1`) union all (select '' AS `Name_exp_1`) union all (select '' AS `Name_exp_1`)	latin1	latin1_swedish_ci
 | ||
| # Name for the field item in select3 is set with this fix.
 | ||
| # Without this fix, name would not have set for the
 | ||
| # columns in select3.
 | ||
| SHOW CREATE VIEW v4;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v4	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS (select 'BUG#14117018' AS `col1`) union all (select '' AS `col2`) union all (select '' AS `Name_exp_1`)	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1, v2, v3, v4, v5;
 | ||
| #
 | ||
| # BUG#19886430: VIEW CREATION WITH NAMED COLUMNS, OVER UNION,
 | ||
| #               IS REJECTED
 | ||
| # Without the patch, reports an error.
 | ||
| CREATE VIEW v1 (fld1, fld2) AS
 | ||
| SELECT 1 AS a, 2 AS b
 | ||
| UNION ALL
 | ||
| SELECT 1 AS a, 1 AS a;
 | ||
| # The column names are explicitly specified and not duplicates, hence
 | ||
| # succeeds.
 | ||
| CREATE VIEW v2 (fld1, fld2) AS
 | ||
| SELECT 1 AS a, 2 AS a
 | ||
| UNION ALL
 | ||
| SELECT 1 AS a, 1 AS a;
 | ||
| # The column name in the first SELECT are not duplicates, hence succeeds.
 | ||
| CREATE VIEW v3 AS
 | ||
| SELECT 1 AS a, 2 AS b
 | ||
| UNION ALL
 | ||
| SELECT 1 AS a, 1 AS a;
 | ||
| # Should report an error, since the explicitly specified column names are
 | ||
| # duplicates.
 | ||
| CREATE VIEW v4 (fld1, fld1) AS
 | ||
| SELECT 1 AS a, 2 AS b
 | ||
| UNION ALL
 | ||
| SELECT 1 AS a, 1 AS a;
 | ||
| ERROR 42S21: Duplicate column name 'fld1'
 | ||
| # Should report an error, since duplicate column name is specified in the
 | ||
| # First SELECT.
 | ||
| CREATE VIEW v4 AS
 | ||
| SELECT 1 AS a, 2 AS a
 | ||
| UNION ALL
 | ||
| SELECT 1 AS a, 1 AS a;
 | ||
| ERROR 42S21: Duplicate column name 'a'
 | ||
| # Cleanup
 | ||
| DROP VIEW v1, v2, v3;
 | ||
| #
 | ||
| # lp:833600 Wrong result with view + outer join + uncorrelated subquery (non-semijoin) 
 | ||
| #
 | ||
| CREATE TABLE t1 ( a int, b int );
 | ||
| INSERT INTO t1 VALUES (0,0),(0,0);
 | ||
| CREATE TABLE t2 ( a int, b int );
 | ||
| INSERT IGNORE INTO t2 VALUES (1,0),(1,0);
 | ||
| CREATE TABLE t3 ( b int );
 | ||
| INSERT IGNORE INTO t3 VALUES (0),(0);
 | ||
| CREATE OR REPLACE VIEW v2 AS SELECT * FROM t2;
 | ||
| SELECT * FROM t1 RIGHT JOIN v2 ON ( v2.a = t1.a ) WHERE v2.b IN ( SELECT b FROM t3 ) AND t1.b IS NULL ;
 | ||
| a	b	a	b
 | ||
| NULL	NULL	1	0
 | ||
| NULL	NULL	1	0
 | ||
| SELECT * FROM t1 RIGHT JOIN v2 ON ( v2.a = t1.a ) WHERE v2.b IN ( SELECT b FROM t3 ) AND t1.b IS NULL ;
 | ||
| a	b	a	b
 | ||
| NULL	NULL	1	0
 | ||
| NULL	NULL	1	0
 | ||
| DROP VIEW v2;
 | ||
| DROP TABLE t1, t2, t3;
 | ||
| #
 | ||
| # BUG#915222: Valgrind complains or crashes with INSERT SELECT
 | ||
| #              within a trigger that uses a view
 | ||
| #
 | ||
| CREATE TABLE t1 (a char(1));
 | ||
| CREATE TABLE t2 (d int, e char(1));
 | ||
| INSERT INTO t2 VALUES (13,'z');
 | ||
| CREATE TRIGGER tr AFTER UPDATE ON t2
 | ||
| FOR EACH ROW
 | ||
| REPLACE INTO t3
 | ||
| SELECT f, a AS alias FROM t3, v;
 | ||
| CREATE TABLE t3 (f int, g char(8));
 | ||
| CREATE VIEW v AS SELECT a, e FROM t2, t1;
 | ||
| UPDATE t2 SET d=7;
 | ||
| UPDATE t2 SET d=7;
 | ||
| UPDATE t2 SET d=7;
 | ||
| UPDATE t2 SET d=7;
 | ||
| DROP TRIGGER tr;
 | ||
| DROP VIEW v;
 | ||
| DROP TABLE t1,t2,t3;
 | ||
| #
 | ||
| # BUG#972943: Assertion failure with INSERT SELECT within a trigger 
 | ||
| #             that uses derived table and materialized view
 | ||
| #
 | ||
| CREATE TABLE t1 (a int, b int);
 | ||
| INSERT INTO t1 VALUES (1,0), (2,8);
 | ||
| CREATE ALGORITHM=TEMPTABLE VIEW v1
 | ||
| AS SELECT * FROM t1;
 | ||
| CREATE TABLE t2 (c int);
 | ||
| CREATE TABLE t3 (d int, e int);
 | ||
| CREATE TRIGGER tr BEFORE INSERT ON t2 FOR EACH ROW
 | ||
| INSERT INTO t3
 | ||
| SELECT t1.*
 | ||
| FROM (SELECT * FROM t1 WHERE b IN (SELECT b FROM v1)) AS alias1, t1
 | ||
| WHERE t1.a = 3 OR t1.a > 5;
 | ||
| INSERT INTO t2 VALUES (1);
 | ||
| DROP TRIGGER tr;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2,t3;
 | ||
| #
 | ||
| # LP bug#1007622 Server crashes in handler::increment_statistics on
 | ||
| # inserting into a view over a view
 | ||
| #
 | ||
| flush status;
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS SELECT a1.* FROM t1 AS a1, t1 AS a2;
 | ||
| CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM v1;
 | ||
| INSERT INTO v2 (a) VALUES (1) ;
 | ||
| select * from t1;
 | ||
| a
 | ||
| 1
 | ||
| drop view v2,v1;
 | ||
| drop table t1;
 | ||
| show status like '%view%';
 | ||
| Variable_name	Value
 | ||
| Com_create_view	2
 | ||
| Com_drop_view	1
 | ||
| Opened_views	3
 | ||
| show status like 'Opened_table%';
 | ||
| Variable_name	Value
 | ||
| Opened_table_definitions	2
 | ||
| Opened_tables	2
 | ||
| #
 | ||
| # MDEV-486 LP BUG#1010116 Incorrect query results in
 | ||
| # view and derived tables
 | ||
| #
 | ||
| SELECT
 | ||
| `Derived1`.`id`,
 | ||
| `Derived2`.`Val1`
 | ||
| FROM (select 30631 as `id`) AS `Derived1` LEFT OUTER JOIN (SELECT
 | ||
| 2 as `id`,
 | ||
| 1 AS `Val1`
 | ||
| FROM (select 30631 as `id`) AS `Derived3`) AS `Derived2` ON `Derived1`.`id` = `Derived2`.`id`;
 | ||
| id	Val1
 | ||
| 30631	NULL
 | ||
| create table t1 ( id int );
 | ||
| insert into t1 values (30631);
 | ||
| create table t2 ( id int );
 | ||
| insert into t2 values (30631);
 | ||
| create algorithm=MERGE view v2 as select 2 as id, 1 as val1 from t2;
 | ||
| select t1.*, v2.* from t1 left join v2 on t1.id = v2.id;
 | ||
| id	id	val1
 | ||
| 30631	NULL	NULL
 | ||
| drop view v2;
 | ||
| drop table t1,t2;
 | ||
| create table t1 ( id int );
 | ||
| insert into t1 values (30631);
 | ||
| create table t2 ( id int );
 | ||
| insert into t2 values (30631);
 | ||
| create algorithm=MERGE view v2 as select 2 as id, id is null as bbb, id as iddqd, 1 as val1 from t2;
 | ||
| select t1.*, v2.* from t1 left join v2 on t1.id = v2.id;
 | ||
| id	id	bbb	iddqd	val1
 | ||
| 30631	NULL	NULL	NULL	NULL
 | ||
| drop view v2;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # MDEV-3914: Wrong result (NULLs instead of real values)
 | ||
| # with INNER and RIGHT JOIN in a FROM subquery, derived_merge=on
 | ||
| # (fix of above MDEV-486 fix)
 | ||
| #
 | ||
| SET @save_optimizer_switch_MDEV_3914=@@optimizer_switch;
 | ||
| SET optimizer_switch = 'derived_merge=on';
 | ||
| CREATE TABLE t1 (a INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t1 VALUES (1),(2);
 | ||
| CREATE TABLE t2 (b INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t2 VALUES (3),(4);
 | ||
| CREATE TABLE t3 (c INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t3 VALUES (5),(6);
 | ||
| SELECT * FROM ( SELECT c FROM ( t1 INNER JOIN t2 ) RIGHT JOIN t3 ON a = c ) AS alias;
 | ||
| c
 | ||
| 5
 | ||
| 6
 | ||
| SET optimizer_switch = 'derived_merge=off';
 | ||
| SELECT * FROM ( SELECT c FROM ( t1 INNER JOIN t2 ) RIGHT JOIN t3 ON a = c ) AS alias;
 | ||
| c
 | ||
| 5
 | ||
| 6
 | ||
| SET optimizer_switch=@save_optimizer_switch_MDEV_3914;
 | ||
| drop table t1,t2,t3;
 | ||
| #
 | ||
| # MDEV-589 (LP BUG#1007647) :
 | ||
| # Assertion `vcol_table == 0 || vcol_table == table' failed in
 | ||
| # fill_record(THD*, List<Item>&, List<Item>&, bool)
 | ||
| #
 | ||
| CREATE TABLE t1 (f1 INT, f2 INT);
 | ||
| CREATE TABLE t2 (f1 INT, f2 INT);
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS SELECT a1.f1, a2.f2 FROM t1 AS a1, t1 AS a2;
 | ||
| CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM v1;
 | ||
| CREATE ALGORITHM=MERGE VIEW v3 AS SELECT a1.f1, a2.f2 FROM t1 AS a1, t2 AS a2;
 | ||
| CREATE ALGORITHM=MERGE VIEW v4 AS SELECT * FROM v3;
 | ||
| INSERT INTO v3 (f1, f2) VALUES (1, 2);
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v3'
 | ||
| INSERT INTO v1 (f1, f2) VALUES (1, 2);
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v1'
 | ||
| INSERT INTO v4 (f1, f2) VALUES (1, 2);
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v4'
 | ||
| INSERT INTO v2 (f1, f2) VALUES (1, 2);
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v2'
 | ||
| drop view v4,v3,v2,v1;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # MDEV-3799 fix of above bugfix (MDEV-589) 
 | ||
| # Wrong result (NULLs instead of real values) with RIGHT JOIN
 | ||
| # in a FROM subquery and derived_merge=on
 | ||
| #
 | ||
| CREATE TABLE t1 (f1 INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t1 VALUES (4),(6);
 | ||
| CREATE TABLE t2 (f2 INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t2 VALUES (7),(8);
 | ||
| SELECT * FROM (  
 | ||
| SELECT * FROM t1 RIGHT JOIN t2 ON f1 = f2
 | ||
| ) AS alias;
 | ||
| f1	f2
 | ||
| NULL	7
 | ||
| NULL	8
 | ||
| SELECT * FROM (  
 | ||
| SELECT * FROM t2 LEFT JOIN t1 ON f1 = f2
 | ||
| ) AS alias;
 | ||
| f2	f1
 | ||
| 7	NULL
 | ||
| 8	NULL
 | ||
| drop tables t1,t2;
 | ||
| #
 | ||
| # MDEV-3876 Wrong result (extra rows) with ALL subquery
 | ||
| # from a MERGE view (duplicate of MDEV-3873)
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT NOT NULL) ENGINE=MyISAM;
 | ||
| INSERT INTO t1 VALUES (1),(2);
 | ||
| CREATE TABLE t2 (b INT NOT NULL) ENGINE=MyISAM;
 | ||
| INSERT INTO t2 VALUES (1),(3);
 | ||
| CREATE OR REPLACE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t2;
 | ||
| SELECT a FROM t1 AS alias
 | ||
| WHERE a >= ALL ( 
 | ||
| SELECT b FROM t1 LEFT JOIN v1 ON (a = b) 
 | ||
| WHERE a = alias.a );
 | ||
| a
 | ||
| 1
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # MDEV-4593: p_s: crash in simplify_joins with delete using subselect
 | ||
| # from view
 | ||
| #
 | ||
| create table `t1`(`a` int);
 | ||
| create table `t2`(`a` int);
 | ||
| create or replace view `v1` as select `a` from `t1`;
 | ||
| prepare s from "delete  from `t2` order by (select 1 from `v1`)";
 | ||
| execute s;
 | ||
| deallocate prepare s;
 | ||
| drop view v1;
 | ||
| drop tables t1,t2;
 | ||
| #
 | ||
| # MDEV-5034 (duplicate of MDEV-5107):
 | ||
| # Left Join Yields All Nulls Instead of Appropriate Matches
 | ||
| #
 | ||
| # test #1
 | ||
| CREATE TABLE t1 (state VARCHAR(32), INDEX(state));
 | ||
| INSERT INTO t1 VALUES ('Indiana'),('Vermont');
 | ||
| CREATE TABLE t2 (state VARCHAR(32));
 | ||
| INSERT INTO t2 VALUES ('Hawaii'),('Oregon'),('Vermont');
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS SELECT t1.* FROM t2, t1;
 | ||
| SELECT * FROM t1 AS outer_t1 LEFT JOIN v1 AS joined_t1
 | ||
| ON (joined_t1.state = outer_t1.state AND joined_t1.state IN ( SELECT 'Vermont' UNION  SELECT 'Florida' ) );
 | ||
| state	state
 | ||
| Indiana	NULL
 | ||
| Vermont	Vermont
 | ||
| Vermont	Vermont
 | ||
| Vermont	Vermont
 | ||
| SELECT * FROM t1 AS outer_t1 LEFT JOIN (SELECT t1.* FROM t2, t1) AS joined_t1 ON (joined_t1.state = outer_t1.state AND joined_t1.state IN ( SELECT 'Vermont' UNION  SELECT 'Florida' ) );
 | ||
| state	state
 | ||
| Indiana	NULL
 | ||
| Vermont	Vermont
 | ||
| Vermont	Vermont
 | ||
| Vermont	Vermont
 | ||
| drop view v1;
 | ||
| drop table t1, t2;
 | ||
| # test #1
 | ||
| CREATE TABLE t1 (a INT, b VARCHAR(1), INDEX(b,a));
 | ||
| INSERT INTO t1 VALUES (4,'p'),(1,'q'),(9,'w');
 | ||
| CREATE TABLE t2 (c VARCHAR(1), INDEX(c));
 | ||
| INSERT INTO t2 VALUES ('q'),('a');
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS SELECT t1a.* FROM t1, t1 AS t1a;
 | ||
| SELECT * FROM t2 LEFT JOIN v1 ON ( c=b AND a IN ( 1,6 ) );
 | ||
| c	a	b
 | ||
| a	NULL	NULL
 | ||
| q	1	q
 | ||
| q	1	q
 | ||
| q	1	q
 | ||
| CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT t1a.* FROM t1, t1 AS t1a;
 | ||
| SELECT * FROM t2 LEFT JOIN v1 ON ( c=b AND a IN ( 1,6 ) );
 | ||
| c	a	b
 | ||
| a	NULL	NULL
 | ||
| q	1	q
 | ||
| q	1	q
 | ||
| q	1	q
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # MDEV-5153: Server crashes in Item_ref::fix_fields on 2nd execution
 | ||
| # of PS with LEFT JOIN and MERGE view or SELECT SQ
 | ||
| #
 | ||
| CREATE TABLE t1 (i1 INT, c1 VARCHAR(6)) ENGINE=MyISAM;
 | ||
| INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
 | ||
| CREATE TABLE t2 (c2 VARCHAR(6)) ENGINE=MyISAM;
 | ||
| INSERT INTO t2 VALUES ('foobar'),('qux');
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1 WHERE ( c1 ) IN ( SELECT c2 FROM t2 ) AND i1 <= 2 ;
 | ||
| PREPARE stmt FROM 'SELECT * FROM t1 LEFT JOIN v1 ON (v1.i1 = t1.i1)';
 | ||
| EXECUTE stmt;
 | ||
| i1	c1	i1	c1
 | ||
| 1	foo	NULL	NULL
 | ||
| 2	bar	NULL	NULL
 | ||
| EXECUTE stmt;
 | ||
| i1	c1	i1	c1
 | ||
| 1	foo	NULL	NULL
 | ||
| 2	bar	NULL	NULL
 | ||
| drop view v1;
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1 WHERE ( c1, c1 ) IN ( SELECT c2, c2 FROM t2 ) AND i1 <= 2 ;
 | ||
| EXECUTE stmt;
 | ||
| i1	c1	i1	c1
 | ||
| 1	foo	NULL	NULL
 | ||
| 2	bar	NULL	NULL
 | ||
| EXECUTE stmt;
 | ||
| i1	c1	i1	c1
 | ||
| 1	foo	NULL	NULL
 | ||
| 2	bar	NULL	NULL
 | ||
| deallocate prepare stmt;
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1),(2);
 | ||
| create view v1 (a,r) as select a,rand() from t1;
 | ||
| create table t2 select a, r as r1, r as r2, r as r3 from v1;
 | ||
| select a, r1 = r2, r2 = r3 from t2;
 | ||
| a	r1 = r2	r2 = r3
 | ||
| 1	1	1
 | ||
| 2	1	1
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # MDEV-5515: 2nd execution of a prepared statement returns wrong results
 | ||
| #
 | ||
| CREATE TABLE t1 (i1 INT, j1 INT NOT NULL, PRIMARY KEY (i1));
 | ||
| INSERT INTO t1 VALUES (30,300),(40,400);
 | ||
| CREATE TABLE t2 (i2 INT);
 | ||
| INSERT INTO t2 VALUES (50),(60);
 | ||
| CREATE TABLE t3 (c3 VARCHAR(20), i3 INT);
 | ||
| INSERT INTO t3 VALUES ('a',10),('b',2);
 | ||
| CREATE TABLE t4 (i4 INT);
 | ||
| INSERT INTO t4 VALUES (1),(2);
 | ||
| DROP VIEW IF EXISTS v1;
 | ||
| Warnings:
 | ||
| Note	4092	Unknown VIEW: 'test.v1'
 | ||
| CREATE VIEW v1 AS select coalesce(j1,i3) AS v1_field1 from t2 join t3 left join t1 on ( i1 = i2 );
 | ||
| CREATE VIEW v2 AS select v1_field1 from t4 join v1;
 | ||
| prepare my_stmt from "select v1_field1 from v2";
 | ||
| execute my_stmt;
 | ||
| v1_field1
 | ||
| 10
 | ||
| 10
 | ||
| 10
 | ||
| 10
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| execute my_stmt;
 | ||
| v1_field1
 | ||
| 10
 | ||
| 10
 | ||
| 10
 | ||
| 10
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| 2
 | ||
| deallocate prepare my_stmt;
 | ||
| DROP VIEW v1,v2;
 | ||
| DROP TABLE t1,t2,t3,t4;
 | ||
| #
 | ||
| #MDEV-5717: Server crash with insert statement containing DEFAULT into
 | ||
| #view
 | ||
| #
 | ||
| CREATE TABLE t1 (
 | ||
| `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 | ||
| `test` tinyint(3) unsigned NOT NULL DEFAULT '0',
 | ||
| PRIMARY KEY (`id`)
 | ||
| );
 | ||
| CREATE VIEW v1 AS (select  t1.id AS id,  t1.test AS test from t1);
 | ||
| INSERT INTO v1 SET test = DEFAULT;
 | ||
| select * from v1;
 | ||
| id	test
 | ||
| 1	0
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-5981: name resolution issues with views and multi-update
 | ||
| # in ps-protocol
 | ||
| #
 | ||
| create table t1 (id1 int primary key, val1 varchar(20));
 | ||
| insert into t1 values (1, 'test1');
 | ||
| create table t2 (id2 int primary key, val2 varchar(20));
 | ||
| insert into t2 values (1, 'test2');
 | ||
| create algorithm=merge view v1 as select id1 as id1v1, val1 as val1v1 from t1;
 | ||
| create algorithm=merge view v2 as
 | ||
| select t2.id2 as id2v2, t2.val2 as val2v2
 | ||
| from t2, v1
 | ||
| where t2.id2 = v1.id1v1;
 | ||
| prepare stmt1 from "update v2 set val2v2 = 'test19' where 1 = id2v2";
 | ||
| execute stmt1;
 | ||
| deallocate prepare stmt1;
 | ||
| drop view v1,v2;
 | ||
| drop table t1,t2;
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- End of 5.3 tests.
 | ||
| # -----------------------------------------------------------------
 | ||
| #
 | ||
| # MDEV-3874: Server crashes in Item_field::print on a SELECT
 | ||
| # from a MERGE view with materialization+semijoin, subquery, ORDER BY
 | ||
| #
 | ||
| SET @save_optimizer_switch_MDEV_3874=@@optimizer_switch;
 | ||
| SET optimizer_switch = 'materialization=on,semijoin=on';
 | ||
| CREATE TABLE t1 (a INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t1 VALUES (1),(7);
 | ||
| CREATE TABLE t2 (b INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t2 VALUES (4),(6);
 | ||
| CREATE TABLE t3 (c INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t3 VALUES (1),(2);
 | ||
| CREATE ALGORITHM=MERGE VIEW v1 AS SELECT  
 | ||
| ( SELECT a FROM t1 WHERE ( 1, 1 ) IN ( 
 | ||
| SELECT b, c FROM t2, t3 HAVING c > 2 ) ) AS field1, 
 | ||
| b + c AS field2 
 | ||
| FROM t2, t3 AS table1
 | ||
| GROUP BY field1, field2 ORDER BY field1;
 | ||
| Warnings:
 | ||
| Warning	1354	View merge algorithm can't be used here for now (assumed undefined algorithm)
 | ||
| SELECT * FROM v1;
 | ||
| field1	field2
 | ||
| NULL	5
 | ||
| NULL	7
 | ||
| NULL	6
 | ||
| NULL	8
 | ||
| drop view v1;
 | ||
| drop table t1,t2,t3;
 | ||
| SET optimizer_switch=@save_optimizer_switch_MDEV_3874;
 | ||
| CREATE TABLE `t1` (
 | ||
| `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 | ||
| `f0` int(11) unsigned NOT NULL DEFAULT '0',
 | ||
| `f1` int(11) unsigned NOT NULL DEFAULT '0',
 | ||
| PRIMARY KEY (`id`),
 | ||
| UNIQUE KEY `id` (`id`)
 | ||
| );
 | ||
| CREATE TABLE `t2` (
 | ||
| `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 | ||
| `f02` bigint(20) unsigned NOT NULL DEFAULT '0',
 | ||
| `f03` int(11) unsigned NOT NULL DEFAULT '0',
 | ||
| PRIMARY KEY (`id`),
 | ||
| UNIQUE KEY `id` (`id`)
 | ||
| );
 | ||
| CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `v1` AS 
 | ||
| SELECT 
 | ||
| `t1`.`f0` AS `f0`,
 | ||
| `t1`.`f1` AS `f1`,
 | ||
| `t2`.`f02` AS `f02`,
 | ||
| `t2`.`f03` AS `f03` 
 | ||
| FROM 
 | ||
| (`t1` LEFT JOIN `t2` ON((`t1`.`id` = `t2`.`f02`)));
 | ||
| CREATE FUNCTION `f1`(
 | ||
| p0 BIGINT(20) UNSIGNED
 | ||
| )
 | ||
| RETURNS bigint(20) unsigned
 | ||
| DETERMINISTIC
 | ||
| CONTAINS SQL
 | ||
| SQL SECURITY DEFINER
 | ||
| COMMENT ''
 | ||
| BEGIN
 | ||
| DECLARE k0 INTEGER UNSIGNED DEFAULT 0;
 | ||
| DECLARE lResult INTEGER UNSIGNED DEFAULT 0;
 | ||
| SET k0 = 0;
 | ||
| WHILE k0 < 1 DO
 | ||
| SELECT COUNT(*) as `f00` INTO lResult  FROM `v1` WHERE `v1`.`f0` = p0; -- BUG
 | ||
| SET k0 = k0 + 1;
 | ||
| END WHILE;
 | ||
| RETURN(k0);
 | ||
| END|
 | ||
| SELECT `f1`(1);
 | ||
| `f1`(1)
 | ||
| 1
 | ||
| SELECT `f1`(1);
 | ||
| `f1`(1)
 | ||
| 1
 | ||
| SELECT `f1`(1);
 | ||
| `f1`(1)
 | ||
| 1
 | ||
| SELECT `f1`(1);
 | ||
| `f1`(1)
 | ||
| 1
 | ||
| DROP FUNCTION f1;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1, t2;
 | ||
| create view v1 as select 1;
 | ||
| FOUND 1 /mariadb-version/ in v1.frm
 | ||
| drop view v1;
 | ||
| #
 | ||
| # MDEV-7260: Crash in get_best_combination when executing multi-table
 | ||
| # UPDATE with nested views
 | ||
| #
 | ||
| CREATE TABLE `t1` (`id` bigint(20));
 | ||
| INSERT INTO `t1` VALUES (1),(2);
 | ||
| CREATE TABLE `t2` (`id` bigint(20));
 | ||
| CREATE TABLE `t3` (`id` bigint(20), `flag` tinyint(4));
 | ||
| create view v1 as select id from t1;
 | ||
| create view v2 as select t2.* from (t2 left join v1 using (id));
 | ||
| update t3 left join v2 using (id) set flag=flag+1;
 | ||
| drop view v2, v1;
 | ||
| drop table t1, t2, t3;
 | ||
| #
 | ||
| # MDEV-7207 - ALTER VIEW does not change ALGORITM
 | ||
| #
 | ||
| create table t1 (a int, b int);
 | ||
| create algorithm=temptable view v2 (c) as select b+1 from t1;
 | ||
| show create view v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`b` + 1 AS `c` from `t1`	latin1	latin1_swedish_ci
 | ||
| alter algorithm=undefined view v2 (c) as select b+1 from t1;
 | ||
| show create view v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`b` + 1 AS `c` from `t1`	latin1	latin1_swedish_ci
 | ||
| alter algorithm=merge view v2 (c) as select b+1 from t1;
 | ||
| show create view v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`b` + 1 AS `c` from `t1`	latin1	latin1_swedish_ci
 | ||
| drop view v2;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-8554: Server crashes in base_list_iterator::next_fast on 1st execution of PS with a multi-table update
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t1 VALUES (1),(2);
 | ||
| CREATE TABLE t2 (b INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t2 VALUES (3),(4);
 | ||
| CREATE TABLE t3 (c INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t3 VALUES (5),(6);
 | ||
| CREATE OR REPLACE ALGORITHM=MERGE VIEW v3 AS SELECT * FROM t3;
 | ||
| PREPARE stmt FROM 'UPDATE t1, t2 SET a = 1 WHERE a IN ( SELECT 0 FROM t3 )';
 | ||
| UPDATE t1, t2 SET a = 1 WHERE a IN ( SELECT 0 FROM v3 );
 | ||
| EXECUTE stmt;
 | ||
| DROP TABLE t1, t2, t3;
 | ||
| DROP VIEW v3;
 | ||
| #
 | ||
| # MDEV-8632: Segmentation fault on INSERT
 | ||
| #
 | ||
| CREATE TABLE `t1` (
 | ||
| `id` int(10) unsigned NOT NULL,
 | ||
| `r` float NOT NULL,
 | ||
| PRIMARY KEY (`id`)
 | ||
| ) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 | ||
| create view v1 as select id, if(r=r,1,2) as d from t1;
 | ||
| create view v2 as
 | ||
| select id, 
 | ||
| d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d as p
 | ||
| from v1;
 | ||
| insert into t1 (id, r)
 | ||
| select id,p from
 | ||
| (
 | ||
| select id, 
 | ||
| d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d as p
 | ||
| from (
 | ||
| select id, if(r=r,1,2) as d
 | ||
| from t1
 | ||
| ) a
 | ||
| ) b
 | ||
| on duplicate key update r=p;
 | ||
| insert into t1 (id, r)
 | ||
| select id,p from v2 
 | ||
| on duplicate key update r=p;
 | ||
| prepare stmt from "insert into t1 (id, r) select id,p from v2 on duplicate key update r=p";
 | ||
| execute stmt;
 | ||
| execute stmt;
 | ||
| deallocate prepare stmt;
 | ||
| drop view v1,v2;
 | ||
| drop table `t1`;
 | ||
| create table t1 (a int, b int);
 | ||
| create view v1 as select a+b from t1;
 | ||
| alter table v1 check partition p1;
 | ||
| Table	Op	Msg_type	Msg_text
 | ||
| test.v1	check	Error	'test.v1' is not of type 'BASE TABLE'
 | ||
| test.v1	check	status	Operation failed
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-10419: crash in mariadb 10.1.16-MariaDB-1~trusty
 | ||
| #
 | ||
| CREATE TABLE t1 (c1 CHAR(13));
 | ||
| CREATE TABLE t2 (c2 CHAR(13));
 | ||
| CREATE FUNCTION f() RETURNS INT RETURN 0;
 | ||
| CREATE OR REPLACE VIEW v1 AS select f() from t1 where c1 in (select c2 from t2);
 | ||
| DROP FUNCTION f;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `f`() AS `f()` from `t1` where `test`.`t1`.`c1` in (select `test`.`t2`.`c2` from `t2`)	latin1	latin1_swedish_ci
 | ||
| Warnings:
 | ||
| Warning	1356	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # MDEV-12099: usage of mergeable view with LEFT JOIN 
 | ||
| #             that can be converted to INNER JOIN
 | ||
| #
 | ||
| create table t1 (a int, b int, key(a)) engine=myisam;
 | ||
| insert into t1 values
 | ||
| (3,20), (7,10), (2,10), (4,30), (8,70), 
 | ||
| (7,70), (9,100), (9,60), (8,80), (7,60);
 | ||
| create table t2 (c int, d int, key (c)) engine=myisam;
 | ||
| insert into t2 values
 | ||
| (50,100), (20, 200), (10,300),
 | ||
| (150,100), (120, 200), (110,300),
 | ||
| (250,100), (220, 200), (210,300);
 | ||
| create table t3(e int, f int not null, key(e), unique (f)) engine=myisam;
 | ||
| insert into t3 values
 | ||
| (100, 3), (300, 5), (400, 4), (300,7),
 | ||
| (300,2), (600, 13), (800, 15), (700, 14),
 | ||
| (600, 23), (800, 25), (700, 24);
 | ||
| create view v1 as
 | ||
| select * from t2 left join t3 on t3.e=t2.d where t3.f is not null;
 | ||
| select *
 | ||
| from t1 left join v1 on v1.c=t1.b 
 | ||
| where t1.a < 5;
 | ||
| a	b	c	d	e	f
 | ||
| 2	10	10	300	300	5
 | ||
| 2	10	10	300	300	7
 | ||
| 2	10	10	300	300	2
 | ||
| 3	20	NULL	NULL	NULL	NULL
 | ||
| 4	30	NULL	NULL	NULL	NULL
 | ||
| select *
 | ||
| from t1 left join ( t2 left join t3 on t3.e=t2.d )
 | ||
| on t2.c=t1.b and  t3.f is not null
 | ||
| where t1.a < 5;
 | ||
| a	b	c	d	e	f
 | ||
| 2	10	10	300	300	5
 | ||
| 2	10	10	300	300	7
 | ||
| 2	10	10	300	300	2
 | ||
| 3	20	NULL	NULL	NULL	NULL
 | ||
| 4	30	NULL	NULL	NULL	NULL
 | ||
| explain extended
 | ||
| select *
 | ||
| from t1 left join v1 on v1.c=t1.b 
 | ||
| where t1.a < 5;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	5	NULL	3	100.00	Using index condition
 | ||
| 1	SIMPLE	t2	ref	c	c	5	test.t1.b	1	100.00	Using where
 | ||
| 1	SIMPLE	t3	ref	f,e	e	5	test.t2.d	1	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`e` AS `e`,`test`.`t3`.`f` AS `f` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(`test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t3`.`e` = `test`.`t2`.`d` and `test`.`t3`.`f` is not null and `test`.`t1`.`b` is not null and `test`.`t2`.`d` is not null) where `test`.`t1`.`a` < 5
 | ||
| explain extended
 | ||
| select *
 | ||
| from t1 left join ( t2 left join t3 on t3.e=t2.d )
 | ||
| on t2.c=t1.b and  t3.f is not null
 | ||
| where t1.a < 5;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	5	NULL	3	100.00	Using index condition
 | ||
| 1	SIMPLE	t2	ref	c	c	5	test.t1.b	1	100.00	Using where
 | ||
| 1	SIMPLE	t3	ref	f,e	e	5	test.t2.d	1	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`e` AS `e`,`test`.`t3`.`f` AS `f` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(`test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t3`.`e` = `test`.`t2`.`d` and `test`.`t3`.`f` is not null and `test`.`t1`.`b` is not null and `test`.`t2`.`d` is not null) where `test`.`t1`.`a` < 5
 | ||
| explain extended
 | ||
| select *
 | ||
| from t1 left join v1 on v1.c=t1.b and v1.f=t1.a
 | ||
| where t1.a < 5;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	5	NULL	3	100.00	Using index condition
 | ||
| 1	SIMPLE	t3	eq_ref	f,e	f	4	test.t1.a	1	100.00	Using where
 | ||
| 1	SIMPLE	t2	ref	c	c	5	test.t1.b	1	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`e` AS `e`,`test`.`t3`.`f` AS `f` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(`test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t3`.`f` = `test`.`t1`.`a` and `test`.`t2`.`d` = `test`.`t3`.`e` and `test`.`t1`.`a` is not null and `test`.`t1`.`a` is not null and `test`.`t1`.`b` is not null) where `test`.`t1`.`a` < 5
 | ||
| explain extended
 | ||
| select *
 | ||
| from t1 left join ( t2 left join t3 on t3.e=t2.d )
 | ||
| on t2.c=t1.b and t3.f=t1.a and t3.f is not null
 | ||
| where t1.a < 5;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	SIMPLE	t1	range	a	a	5	NULL	3	100.00	Using index condition
 | ||
| 1	SIMPLE	t3	eq_ref	f,e	f	4	test.t1.a	1	100.00	Using where
 | ||
| 1	SIMPLE	t2	ref	c	c	5	test.t1.b	1	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1003	select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`e` AS `e`,`test`.`t3`.`f` AS `f` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(`test`.`t2`.`c` = `test`.`t1`.`b` and `test`.`t3`.`f` = `test`.`t1`.`a` and `test`.`t2`.`d` = `test`.`t3`.`e` and `test`.`t1`.`a` is not null and `test`.`t1`.`a` is not null and `test`.`t1`.`b` is not null) where `test`.`t1`.`a` < 5
 | ||
| drop view v1;
 | ||
| drop table t1,t2,t3;
 | ||
| #
 | ||
| # MDEV-11240: Server crashes in check_view_single_update or
 | ||
| # Assertion `derived->table' failed in mysql_derived_merge_for_insert
 | ||
| #
 | ||
| CREATE TABLE t3 (a INT);
 | ||
| CREATE ALGORITHM = MERGE VIEW v1 AS SELECT t2.a FROM t3 AS t1, t3 AS t2;
 | ||
| CREATE ALGORITHM = MERGE VIEW v2 AS SELECT * FROM v1;
 | ||
| PREPARE stmt FROM 'REPLACE INTO v2 SELECT a FROM t3';
 | ||
| ERROR HY000: Can not insert into join view 'test.v2' without fields list
 | ||
| drop view v1,v2;
 | ||
| drop table t3;
 | ||
| #
 | ||
| # MDEV-14619: VIEW and GROUP_CONCAT
 | ||
| #
 | ||
| CREATE TABLE t1 (str text);
 | ||
| INSERT INTO t1 VALUES ("My"),("SQL");
 | ||
| CREATE VIEW v1 AS SELECT GROUP_CONCAT(str  SEPARATOR  '\\') FROM t1;
 | ||
| SELECT * FROM v1;
 | ||
| GROUP_CONCAT(str  SEPARATOR  '\\')
 | ||
| My\SQL
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select group_concat(`t1`.`str` separator '\\') AS `GROUP_CONCAT(str  SEPARATOR  '\\')` from `t1`	latin1	latin1_swedish_ci
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| CREATE TABLE IF NOT EXISTS t0 (f0 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t1 (f1 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t2 (f2 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t3 (f3 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t4 (f4 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t5 (f5 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t6 (f6 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t7 (f7 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t8 (f8 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t9 (f9 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t10 (f10 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t11 (f11 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t12 (f12 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t13 (f13 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t14 (f14 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t15 (f15 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t16 (f16 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t17 (f17 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t18 (f18 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t19 (f19 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t20 (f20 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t21 (f21 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t22 (f22 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t23 (f23 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t24 (f24 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t25 (f25 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t26 (f26 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t27 (f27 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t28 (f28 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t29 (f29 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t30 (f30 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t31 (f31 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t32 (f32 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t33 (f33 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t34 (f34 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t35 (f35 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t36 (f36 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t37 (f37 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t38 (f38 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t39 (f39 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t40 (f40 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t41 (f41 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t42 (f42 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t43 (f43 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t44 (f44 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t45 (f45 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t46 (f46 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t47 (f47 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t48 (f48 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t49 (f49 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t50 (f50 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t51 (f51 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t52 (f52 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t53 (f53 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t54 (f54 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t55 (f55 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t56 (f56 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t57 (f57 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t58 (f58 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t59 (f59 INT);
 | ||
| CREATE TABLE IF NOT EXISTS t60 (f60 INT);
 | ||
| CREATE OR REPLACE VIEW v60 AS SELECT * FROM t60;
 | ||
| EXPLAIN
 | ||
| SELECT t0.*
 | ||
| FROM t0
 | ||
| JOIN t1
 | ||
| ON t1.f1 = t0.f0
 | ||
| LEFT JOIN t2
 | ||
| ON t0.f0 = t2.f2
 | ||
| LEFT JOIN t3
 | ||
| ON t0.f0 = t3.f3
 | ||
| LEFT JOIN t4
 | ||
| ON t0.f0 = t4.f4
 | ||
| LEFT JOIN t5
 | ||
| ON t4.f4 = t5.f5
 | ||
| LEFT JOIN t6
 | ||
| ON t0.f0 = t6.f6
 | ||
| LEFT JOIN t7
 | ||
| ON t0.f0 = t7.f7
 | ||
| LEFT JOIN t8
 | ||
| ON t0.f0 = t8.f8
 | ||
| LEFT JOIN t9
 | ||
| ON t0.f0 = t9.f9
 | ||
| LEFT JOIN t10
 | ||
| ON t0.f0 = t10.f10
 | ||
| LEFT JOIN t11
 | ||
| ON t0.f0 = t11.f11
 | ||
| LEFT JOIN t12
 | ||
| ON t0.f0 = t12.f12
 | ||
| LEFT JOIN t13
 | ||
| ON t0.f0 = t13.f13
 | ||
| LEFT JOIN t14
 | ||
| ON t0.f0 = t14.f14
 | ||
| LEFT JOIN t15
 | ||
| ON t0.f0 = t15.f15
 | ||
| LEFT JOIN t16
 | ||
| ON t0.f0 = t16.f16
 | ||
| LEFT JOIN t17
 | ||
| ON t0.f0 = t17.f17
 | ||
| LEFT JOIN t18
 | ||
| ON t0.f0 = t18.f18
 | ||
| LEFT JOIN t19
 | ||
| ON t18.f18 = t19.f19
 | ||
| LEFT JOIN t20
 | ||
| ON t20.f20 = t19.f19
 | ||
| LEFT JOIN t21
 | ||
| ON t20.f20 = t21.f21
 | ||
| LEFT JOIN t22
 | ||
| ON t19.f19 = t22.f22
 | ||
| LEFT JOIN t23
 | ||
| ON t23.f23 = t0.f0
 | ||
| LEFT JOIN t24
 | ||
| ON t24.f24 = t23.f23
 | ||
| LEFT JOIN t25
 | ||
| ON t0.f0 = t25.f25
 | ||
| LEFT JOIN t26
 | ||
| ON t26.f26 = t0.f0
 | ||
| LEFT JOIN t27
 | ||
| ON t27.f27 = t0.f0
 | ||
| LEFT JOIN t28
 | ||
| ON t0.f0 = t28.f28
 | ||
| LEFT JOIN t29
 | ||
| ON t0.f0 = t29.f29
 | ||
| LEFT JOIN t30
 | ||
| ON t30.f30 = t0.f0
 | ||
| LEFT JOIN t31
 | ||
| ON t0.f0 = t31.f31
 | ||
| LEFT JOIN t32
 | ||
| ON t32.f32 = t31.f31
 | ||
| LEFT JOIN t33
 | ||
| ON t33.f33 = t0.f0
 | ||
| LEFT JOIN t34
 | ||
| ON t33.f33 = t34.f34
 | ||
| LEFT JOIN t35
 | ||
| ON t33.f33 = t35.f35
 | ||
| LEFT JOIN t36
 | ||
| ON t36.f36 = t0.f0
 | ||
| LEFT JOIN t37
 | ||
| ON t32.f32 = t37.f37
 | ||
| LEFT JOIN t38
 | ||
| ON t31.f31 = t38.f38
 | ||
| LEFT JOIN t39
 | ||
| ON t39.f39 = t0.f0
 | ||
| LEFT JOIN t40
 | ||
| ON t40.f40 = t39.f39
 | ||
| LEFT JOIN t41
 | ||
| ON t41.f41 = t0.f0
 | ||
| LEFT JOIN t42
 | ||
| ON t42.f42 = t41.f41
 | ||
| LEFT JOIN t43
 | ||
| ON t43.f43 = t41.f41
 | ||
| LEFT JOIN t44
 | ||
| ON t44.f44 = t0.f0
 | ||
| LEFT JOIN t45
 | ||
| ON t45.f45 = t0.f0
 | ||
| LEFT JOIN t46
 | ||
| ON t46.f46 = t0.f0
 | ||
| LEFT JOIN t47
 | ||
| ON t47.f47 = t0.f0
 | ||
| LEFT JOIN t48
 | ||
| ON t48.f48 = t0.f0
 | ||
| LEFT JOIN t49
 | ||
| ON t0.f0 = t49.f49
 | ||
| LEFT JOIN t50
 | ||
| ON t0.f0 = t50.f50
 | ||
| LEFT JOIN t51
 | ||
| ON t0.f0 = t51.f51
 | ||
| LEFT JOIN t52
 | ||
| ON t52.f52 = t0.f0
 | ||
| LEFT JOIN t53
 | ||
| ON t53.f53 = t0.f0
 | ||
| LEFT JOIN t54
 | ||
| ON t54.f54 = t0.f0
 | ||
| LEFT JOIN t55
 | ||
| ON t55.f55 = t0.f0
 | ||
| LEFT JOIN t56
 | ||
| ON t56.f56 = t0.f0
 | ||
| LEFT JOIN t57
 | ||
| ON t57.f57 = t0.f0
 | ||
| LEFT JOIN t58
 | ||
| ON t58.f58 = t57.f57
 | ||
| LEFT JOIN t59
 | ||
| ON t36.f36 = t59.f59
 | ||
| LEFT JOIN v60
 | ||
| ON t36.f36 = v60.f60
 | ||
| ;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | ||
| 1	PRIMARY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE noticed after reading const tables
 | ||
| 2	SUBQUERY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	no matching row in const table
 | ||
| drop table t0, t1, t2, t3, t4, t5, t6, t7, t8, t9,
 | ||
| t10, t11, t12, t13, t14, t15, t16, t17, t18,
 | ||
| t19, t20, t21, t22, t23, t24, t25, t26, t27,
 | ||
| t28, t29, t30, t31, t32, t33, t34, t35, t36,
 | ||
| t37, t38, t39, t40, t41, t42, t43, t44, t45,
 | ||
| t46, t47, t48, t49, t50, t51, t52, t53, t54,
 | ||
| t55, t56, t57, t58, t59,t60;
 | ||
| drop view v60;
 | ||
| #
 | ||
| # MDEV-15572: view.test, server crash with --big-tables=1
 | ||
| #
 | ||
| set tmp_memory_table_size=0;
 | ||
| CREATE TABLE t1 ( f1 int , f2 int , f3 int , f4 int);
 | ||
| CREATE TABLE t2 ( f1 int , f2 int , f3 int , f4 int);
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT t2.f1, t1.f2, t2.f3, t2.f4 FROM (t1 JOIN t2);
 | ||
| REPLACE INTO v1 (f1, f2, f3, f4)
 | ||
| SELECT f1, f2, f3, f4 FROM t1;
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v1'
 | ||
| drop view v1;
 | ||
| drop table t1, t2;
 | ||
| set tmp_memory_table_size=default;
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- End of 5.5 tests.
 | ||
| # -----------------------------------------------------------------
 | ||
| # some subqueries in SELECT list test
 | ||
| create table t1 (a int, b int);
 | ||
| create table t2 (a int, b int);
 | ||
| insert into t1 values (1,2), (3,4), (3,3), (5,6), (7,8), (9,10);
 | ||
| insert into t2 values (1,2), (3,4), (3,3), (5,6), (7,8), (9,10);
 | ||
| create algorithm=merge view v1 as select t1.a as a, (select max(b) from t2 where t1.a=t2.a) as c from t1;
 | ||
| explain extended
 | ||
| select * from v1;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	
 | ||
| 3	DEPENDENT SUBQUERY	t2	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #2
 | ||
| Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,<expr_cache><`test`.`t1`.`a`>((/* select#3 */ select max(`test`.`t2`.`b`) from `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`a`)) AS `c` from `test`.`t1`
 | ||
| select * from v1;
 | ||
| a	c
 | ||
| 1	2
 | ||
| 3	4
 | ||
| 3	4
 | ||
| 5	6
 | ||
| 7	8
 | ||
| 9	10
 | ||
| explain extended
 | ||
| select * from t2, v1 where t2.a=v1.a;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t2	ALL	NULL	NULL	NULL	NULL	6	100.00	
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| 3	DEPENDENT SUBQUERY	t2	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #2
 | ||
| Note	1003	/* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t1`.`a` AS `a`,<expr_cache><`test`.`t1`.`a`>((/* select#3 */ select max(`test`.`t2`.`b`) from `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`a`)) AS `c` from `test`.`t2` join `test`.`t1` where `test`.`t1`.`a` = `test`.`t2`.`a`
 | ||
| select * from t2, v1 where t2.a=v1.a;
 | ||
| a	b	a	c
 | ||
| 1	2	1	2
 | ||
| 3	4	3	4
 | ||
| 3	3	3	4
 | ||
| 3	4	3	4
 | ||
| 3	3	3	4
 | ||
| 5	6	5	6
 | ||
| 7	8	7	8
 | ||
| 9	10	9	10
 | ||
| explain extended
 | ||
| select * from t1, v1 where t1.a=v1.a;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| 3	DEPENDENT SUBQUERY	t2	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #2
 | ||
| Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`a` AS `a`,<expr_cache><`test`.`t1`.`a`>((/* select#3 */ select max(`test`.`t2`.`b`) from `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`a`)) AS `c` from `test`.`t1` join `test`.`t1` where `test`.`t1`.`a` = `test`.`t1`.`a`
 | ||
| select * from t1, v1 where t1.a=v1.a;
 | ||
| a	b	a	c
 | ||
| 1	2	1	2
 | ||
| 3	4	3	4
 | ||
| 3	3	3	4
 | ||
| 3	4	3	4
 | ||
| 3	3	3	4
 | ||
| 5	6	5	6
 | ||
| 7	8	7	8
 | ||
| 9	10	9	10
 | ||
| explain extended
 | ||
| select * from t1, v1 where t1.b=v1.c;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| 3	DEPENDENT SUBQUERY	t2	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #2
 | ||
| Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`a` AS `a`,<expr_cache><`test`.`t1`.`a`>((/* select#3 */ select max(`test`.`t2`.`b`) from `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`a`)) AS `c` from `test`.`t1` join `test`.`t1` where `test`.`t1`.`b` = <expr_cache><`test`.`t1`.`a`>((/* select#3 */ select max(`test`.`t2`.`b`) from `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`a`))
 | ||
| select * from t1, v1 where t1.b=v1.c;
 | ||
| a	b	a	c
 | ||
| 1	2	1	2
 | ||
| 3	4	3	4
 | ||
| 3	4	3	4
 | ||
| 5	6	5	6
 | ||
| 7	8	7	8
 | ||
| 9	10	9	10
 | ||
| explain extended
 | ||
| select * from t2, t1, v1 where t1.a=t2.a and t1.a=v1.a;
 | ||
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | ||
| 1	PRIMARY	t2	ALL	NULL	NULL	NULL	NULL	6	100.00	
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where; Using join buffer (flat, BNL join)
 | ||
| 1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where; Using join buffer (incremental, BNL join)
 | ||
| 3	DEPENDENT SUBQUERY	t2	ALL	NULL	NULL	NULL	NULL	6	100.00	Using where
 | ||
| Warnings:
 | ||
| Note	1276	Field or reference 'test.t1.a' of SELECT #3 was resolved in SELECT #2
 | ||
| Note	1003	/* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`a` AS `a`,<expr_cache><`test`.`t1`.`a`>((/* select#3 */ select max(`test`.`t2`.`b`) from `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`a`)) AS `c` from `test`.`t2` join `test`.`t1` join `test`.`t1` where `test`.`t1`.`a` = `test`.`t2`.`a` and `test`.`t1`.`a` = `test`.`t2`.`a`
 | ||
| select * from t2, t1, v1 where t1.a=t2.a and t1.a=v1.a;
 | ||
| a	b	a	b	a	c
 | ||
| 1	2	1	2	1	2
 | ||
| 3	4	3	4	3	4
 | ||
| 3	3	3	4	3	4
 | ||
| 3	4	3	3	3	4
 | ||
| 3	3	3	3	3	4
 | ||
| 3	4	3	4	3	4
 | ||
| 3	3	3	4	3	4
 | ||
| 3	4	3	3	3	4
 | ||
| 3	3	3	3	3	4
 | ||
| 5	6	5	6	5	6
 | ||
| 7	8	7	8	7	8
 | ||
| 9	10	9	10	9	10
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| create table t1 (i int not null);
 | ||
| insert into t1 values (1),(2);
 | ||
| create table t2 (j int not null);
 | ||
| insert into t2 values (11),(12);
 | ||
| create algorithm=merge view v3 as select t1.* from t2 left join t1 on (t2.j = t1.i);
 | ||
| prepare stmt from 'select count(v3.i) from t1, v3';
 | ||
| execute stmt;
 | ||
| count(v3.i)
 | ||
| 0
 | ||
| execute stmt;
 | ||
| count(v3.i)
 | ||
| 0
 | ||
| drop table t1, t2;
 | ||
| drop view v3;
 | ||
| #
 | ||
| # MDEV-8525: mariadb 10.0.20 crashing when data is read by Kodi 
 | ||
| # media center (http://kodi.tv).
 | ||
| #
 | ||
| CREATE TABLE `t1` (
 | ||
| `idSong` int(11) NOT NULL AUTO_INCREMENT,
 | ||
| `idAlbum` int(11) DEFAULT NULL,
 | ||
| `idPath` int(11) DEFAULT NULL,
 | ||
| `strArtists` text,
 | ||
| `strGenres` text,
 | ||
| `strTitle` varchar(512) DEFAULT NULL,
 | ||
| `iTrack` int(11) DEFAULT NULL,
 | ||
| `iDuration` int(11) DEFAULT NULL,
 | ||
| `iYear` int(11) DEFAULT NULL,
 | ||
| `dwFileNameCRC` text,
 | ||
| `strFileName` text,
 | ||
| `strMusicBrainzTrackID` text,
 | ||
| `iTimesPlayed` int(11) DEFAULT NULL,
 | ||
| `iStartOffset` int(11) DEFAULT NULL,
 | ||
| `iEndOffset` int(11) DEFAULT NULL,
 | ||
| `idThumb` int(11) DEFAULT NULL,
 | ||
| `lastplayed` varchar(20) DEFAULT NULL,
 | ||
| `rating` char(1) DEFAULT '0',
 | ||
| `comment` text,
 | ||
| `mood` text,
 | ||
| PRIMARY KEY (`idSong`),
 | ||
| UNIQUE KEY `idxSong7` (`idAlbum`,`strMusicBrainzTrackID`(36)),
 | ||
| KEY `idxSong` (`strTitle`(255)),
 | ||
| KEY `idxSong1` (`iTimesPlayed`),
 | ||
| KEY `idxSong2` (`lastplayed`),
 | ||
| KEY `idxSong3` (`idAlbum`),
 | ||
| KEY `idxSong6` (`idPath`,`strFileName`(255))
 | ||
| )  DEFAULT CHARSET=utf8;
 | ||
| INSERT INTO `t1` VALUES (1,1,1,'strArtists1','strGenres1','strTitle1',1,100,2000,NULL,'strFileName1','strMusicBrainzTrackID1',0,0,0,NULL,NULL,'0','',''),(2,2,2,'strArtists2','strGenres2','strTitle2',2,200,2001,NULL,'strFileName2','strMusicBrainzTrackID2',0,0,0,NULL,NULL,'0','','');
 | ||
| CREATE TABLE `t2` (
 | ||
| `idAlbum` int(11) NOT NULL AUTO_INCREMENT,
 | ||
| `strAlbum` varchar(256) DEFAULT NULL,
 | ||
| `strMusicBrainzAlbumID` text,
 | ||
| `strArtists` text,
 | ||
| `strGenres` text,
 | ||
| `iYear` int(11) DEFAULT NULL,
 | ||
| `idThumb` int(11) DEFAULT NULL,
 | ||
| `bCompilation` int(11) NOT NULL DEFAULT '0',
 | ||
| `strMoods` text,
 | ||
| `strStyles` text,
 | ||
| `strThemes` text,
 | ||
| `strReview` text,
 | ||
| `strImage` text,
 | ||
| `strLabel` text,
 | ||
| `strType` text,
 | ||
| `iRating` int(11) DEFAULT NULL,
 | ||
| `lastScraped` varchar(20) DEFAULT NULL,
 | ||
| `dateAdded` varchar(20) DEFAULT NULL,
 | ||
| `strReleaseType` text,
 | ||
| PRIMARY KEY (`idAlbum`),
 | ||
| UNIQUE KEY `idxAlbum_2` (`strMusicBrainzAlbumID`(36)),
 | ||
| KEY `idxAlbum` (`strAlbum`(255)),
 | ||
| KEY `idxAlbum_1` (`bCompilation`)
 | ||
| ) DEFAULT CHARSET=utf8;
 | ||
| INSERT INTO `t2` VALUES (1,'strAlbum1','strMusicBrainzAlbumID1','strArtists1','strGenres1',2000,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'album');
 | ||
| CREATE TABLE `t3` (
 | ||
| `idArtist` int(11) DEFAULT NULL,
 | ||
| `idAlbum` int(11) DEFAULT NULL,
 | ||
| `strJoinPhrase` text,
 | ||
| `boolFeatured` int(11) DEFAULT NULL,
 | ||
| `iOrder` int(11) DEFAULT NULL,
 | ||
| `strArtist` text,
 | ||
| UNIQUE KEY `idxAlbumArtist_1` (`idAlbum`,`idArtist`),
 | ||
| UNIQUE KEY `idxAlbumArtist_2` (`idArtist`,`idAlbum`),
 | ||
| KEY `idxAlbumArtist_3` (`boolFeatured`)
 | ||
| ) DEFAULT CHARSET=utf8;
 | ||
| INSERT INTO `t3` VALUES (1,1,'',0,0,'strArtist1');
 | ||
| CREATE TABLE `t4` (
 | ||
| `idArtist` int(11) NOT NULL AUTO_INCREMENT,
 | ||
| `strArtist` varchar(256) DEFAULT NULL,
 | ||
| `strMusicBrainzArtistID` text,
 | ||
| `strBorn` text,
 | ||
| `strFormed` text,
 | ||
| `strGenres` text,
 | ||
| `strMoods` text,
 | ||
| `strStyles` text,
 | ||
| `strInstruments` text,
 | ||
| `strBiography` text,
 | ||
| `strDied` text,
 | ||
| `strDisbanded` text,
 | ||
| `strYearsActive` text,
 | ||
| `strImage` text,
 | ||
| `strFanart` text,
 | ||
| `lastScraped` varchar(20) DEFAULT NULL,
 | ||
| `dateAdded` varchar(20) DEFAULT NULL,
 | ||
| PRIMARY KEY (`idArtist`),
 | ||
| UNIQUE KEY `idxArtist1` (`strMusicBrainzArtistID`(36)),
 | ||
| KEY `idxArtist` (`strArtist`(255))
 | ||
| ) DEFAULT CHARSET=utf8;
 | ||
| INSERT INTO `t4` VALUES (1,'strArtist1','strMusicBrainzArtistID',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 | ||
| CREATE VIEW `v1` AS select `t2`.`idAlbum` AS `idAlbum`,`t2`.`strAlbum` AS `strAlbum`,`t2`.`strMusicBrainzAlbumID` AS `strMusicBrainzAlbumID`,`t2`.`strArtists` AS `strArtists`,`t2`.`strGenres` AS `strGenres`,`t2`.`iYear` AS `iYear`,`t2`.`strMoods` AS `strMoods`,`t2`.`strStyles` AS `strStyles`,`t2`.`strThemes` AS `strThemes`,`t2`.`strReview` AS `strReview`,`t2`.`strLabel` AS `strLabel`,`t2`.`strType` AS `strType`,`t2`.`strImage` AS `strImage`,`t2`.`iRating` AS `iRating`,`t2`.`bCompilation` AS `bCompilation`,(select min(`t1`.`iTimesPlayed`) from `t1` where (`t1`.`idAlbum` = `t2`.`idAlbum`)) AS `iTimesPlayed`,`t2`.`strReleaseType` AS `strReleaseType` from `t2`;
 | ||
| CREATE VIEW `v2` AS select `t3`.`idAlbum` AS `idAlbum`,`t3`.`idArtist` AS `idArtist`,`t4`.`strArtist` AS `strArtist`,`t4`.`strMusicBrainzArtistID` AS `strMusicBrainzArtistID`,`t3`.`boolFeatured` AS `boolFeatured`,`t3`.`strJoinPhrase` AS `strJoinPhrase`,`t3`.`iOrder` AS `iOrder` from (`t3` join `t4` on((`t3`.`idArtist` = `t4`.`idArtist`)));
 | ||
| SELECT v1.*,v2.* FROM v1 LEFT JOIN v2 ON v1.idAlbum = v2.idAlbum WHERE v1.idAlbum = 1 ORDER BY v2.iOrder;
 | ||
| idAlbum	strAlbum	strMusicBrainzAlbumID	strArtists	strGenres	iYear	strMoods	strStyles	strThemes	strReview	strLabel	strType	strImage	iRating	bCompilation	iTimesPlayed	strReleaseType	idAlbum	idArtist	strArtist	strMusicBrainzArtistID	boolFeatured	strJoinPhrase	iOrder
 | ||
| 1	strAlbum1	strMusicBrainzAlbumID1	strArtists1	strGenres1	2000	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	0	0	album	1	1	strArtist1	strMusicBrainzArtistID	0		0
 | ||
| drop view v1,v2;
 | ||
| drop table t1,t2,t3,t4;
 | ||
| #
 | ||
| # MDEV-8913: Derived queries with same column names as final
 | ||
| # projection causes issues when using Order By
 | ||
| #
 | ||
| create table t1 (field int);
 | ||
| insert into t1 values (10),(5),(3),(8),(20);
 | ||
| SELECT sq.f2 AS f1, sq.f1 AS f2
 | ||
| FROM ( SELECT field AS f1, 1 AS f2 FROM t1) AS sq
 | ||
| ORDER BY sq.f1;
 | ||
| f1	f2
 | ||
| 1	3
 | ||
| 1	5
 | ||
| 1	8
 | ||
| 1	10
 | ||
| 1	20
 | ||
| create view v1 as SELECT field AS f1, 1 AS f2 FROM t1;
 | ||
| SELECT sq.f2 AS f1, sq.f1 AS f2
 | ||
| FROM v1 AS sq
 | ||
| ORDER BY sq.f1;
 | ||
| f1	f2
 | ||
| 1	3
 | ||
| 1	5
 | ||
| 1	8
 | ||
| 1	10
 | ||
| 1	20
 | ||
| drop view v1;
 | ||
| create table t2 SELECT field AS f1, 1 AS f2 FROM t1;
 | ||
| SELECT
 | ||
| sq.f2 AS f1,
 | ||
| sq.f1 AS f2
 | ||
| FROM t2 AS sq
 | ||
| ORDER BY sq.f1;
 | ||
| f1	f2
 | ||
| 1	3
 | ||
| 1	5
 | ||
| 1	8
 | ||
| 1	10
 | ||
| 1	20
 | ||
| drop table t1, t2;
 | ||
| SELECT 1 FROM (SELECT 1 as a) AS b HAVING (SELECT `SOME_GARBAGE`.b.a)=1;
 | ||
| ERROR 42S22: Unknown column 'SOME_GARBAGE.b.a' in 'SELECT'
 | ||
| #
 | ||
| # MDEV-10035: DBUG_ASSERT on CREATE VIEW v1 AS SELECT * FROM t1
 | ||
| # FOR UPDATE
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| insert into t1 values (1),(2);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 FOR UPDATE;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` for update	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 LOCK IN SHARE MODE;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` lock in share mode	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-8642: WHERE Clause not applied on View - Empty result set returned
 | ||
| #
 | ||
| CREATE TABLE `t1` (
 | ||
| `id` int(20) NOT NULL AUTO_INCREMENT,
 | ||
| `use_case` int(11) DEFAULT NULL,
 | ||
| `current_deadline` date DEFAULT NULL,
 | ||
| `ts_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | ||
| PRIMARY KEY (`id`),
 | ||
| UNIQUE KEY `id_UNIQUE` (`id`)
 | ||
| ) ENGINE=MyISAM AUTO_INCREMENT=13976 DEFAULT CHARSET=latin1;
 | ||
| INSERT INTO `t1` VALUES (1,10,'2015-12-18','2015-08-18 08:38:16');
 | ||
| INSERT INTO `t1` VALUES (2,20,'2015-10-18','2015-08-18 08:43:30');
 | ||
| CREATE VIEW v1 AS SELECT
 | ||
| use_case as use_case_id,
 | ||
| (
 | ||
| SELECT 
 | ||
| deadline_sub.current_deadline
 | ||
| FROM 
 | ||
| t1 deadline_sub
 | ||
| WHERE 
 | ||
| deadline_sub.use_case = use_case_id
 | ||
| AND ts_create = (SELECT 
 | ||
| MIN(ts_create)
 | ||
| FROM 
 | ||
| t1 startdate_sub
 | ||
| WHERE 
 | ||
| startdate_sub.use_case = use_case_id
 | ||
| )
 | ||
| ) AS InitialDeadline
 | ||
| FROM 
 | ||
| t1;
 | ||
| SELECT * FROM v1 where use_case_id = 10;
 | ||
| use_case_id	InitialDeadline
 | ||
| 10	2015-12-18
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-12666: CURRENT_ROLE() and DATABASE() does not work in a view
 | ||
| #
 | ||
| # DATABASE() fails only when the initial view creation features a NULL
 | ||
| # default database.
 | ||
| #
 | ||
| # CREATE, USE and DROP database so that we have no "default" database.
 | ||
| #
 | ||
| CREATE DATABASE temporary;
 | ||
| USE temporary;
 | ||
| DROP DATABASE temporary;
 | ||
| SELECT DATABASE();
 | ||
| DATABASE()
 | ||
| NULL
 | ||
| CREATE VIEW test.v_no_db AS SELECT DATABASE() = 'temporary_two';
 | ||
| SHOW CREATE VIEW test.v_no_db;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v_no_db	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test`.`v_no_db` AS select database() = 'temporary_two' AS `DATABASE() = 'temporary_two'`	latin1	latin1_swedish_ci
 | ||
| PREPARE prepared_no_database FROM "SELECT DATABASE() = 'temporary_two'";
 | ||
| #
 | ||
| # All statements should return NULL
 | ||
| #
 | ||
| EXECUTE prepared_no_database;
 | ||
| DATABASE() = 'temporary_two'
 | ||
| NULL
 | ||
| SELECT DATABASE() = 'temporary_two';
 | ||
| DATABASE() = 'temporary_two'
 | ||
| NULL
 | ||
| SELECT * FROM test.v_no_db;
 | ||
| DATABASE() = 'temporary_two'
 | ||
| NULL
 | ||
| CREATE DATABASE temporary_two;
 | ||
| USE temporary_two;
 | ||
| CREATE VIEW test.v_with_db AS SELECT DATABASE() = 'temporary_two';
 | ||
| PREPARE prepared_with_database FROM "SELECT DATABASE() = 'temporary_two'";
 | ||
| #
 | ||
| # All statements should return 1;
 | ||
| #
 | ||
| SELECT DATABASE() = 'temporary_two';
 | ||
| DATABASE() = 'temporary_two'
 | ||
| 1
 | ||
| SELECT * FROM test.v_no_db;
 | ||
| DATABASE() = 'temporary_two'
 | ||
| 1
 | ||
| SELECT * FROM test.v_with_db;
 | ||
| DATABASE() = 'temporary_two'
 | ||
| 1
 | ||
| EXECUTE prepared_with_database;
 | ||
| DATABASE() = 'temporary_two'
 | ||
| 1
 | ||
| #
 | ||
| # Prepared statements maintain default database to be the same
 | ||
| # during on creation so this should return NULL still.
 | ||
| # See MySQL bug #25843
 | ||
| #
 | ||
| EXECUTE prepared_no_database;
 | ||
| DATABASE() = 'temporary_two'
 | ||
| NULL
 | ||
| DROP DATABASE temporary_two;
 | ||
| DROP VIEW test.v_no_db;
 | ||
| DROP VIEW test.v_with_db;
 | ||
| USE test;
 | ||
| # -----------------------------------------------------------------
 | ||
| # -- End of 10.0 tests.
 | ||
| # -----------------------------------------------------------------
 | ||
| SET optimizer_switch=@save_optimizer_switch;
 | ||
| #
 | ||
| # Start of 10.1 tests
 | ||
| #
 | ||
| #
 | ||
| # MDEV-8747 Wrong result for SELECT..WHERE derived_table_column='a' AND derived_table_column<>_latin1'A' COLLATE latin1_bin
 | ||
| #
 | ||
| CREATE TABLE t1 (a varchar(10) character set cp1251 collate cp1251_ukrainian_ci, KEY (a)) ;
 | ||
| INSERT INTO t1 VALUES ('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'),('MM'),('`1');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT * FROM t1 WHERE a <> 0 AND a = ' 1';
 | ||
| a
 | ||
| Warnings:
 | ||
| Warning	1292	Truncated incorrect DECIMAL value: '`1'
 | ||
| SELECT * FROM v1 WHERE a <> 0 AND a = ' 1';
 | ||
| a
 | ||
| Warnings:
 | ||
| Warning	1292	Truncated incorrect DECIMAL value: '`1'
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (a ENUM('5','6'));
 | ||
| INSERT INTO t1 VALUES ('5'),('6');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT * FROM t1 WHERE a='5' AND a<2;
 | ||
| a
 | ||
| 5
 | ||
| SELECT * FROM v1 WHERE a='5' AND a<2;
 | ||
| a
 | ||
| 5
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-8749 Wrong result for SELECT..WHERE derived_table_enum_column='number' AND derived_table_enum_column OP number2
 | ||
| #
 | ||
| CREATE TABLE t1 (a varchar(10) character set cp1251 collate cp1251_ukrainian_ci, KEY (a));
 | ||
| INSERT INTO t1 VALUES ('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'),('MM'),('`1');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT * FROM t1 WHERE a <> 0 AND a = ' 1';
 | ||
| a
 | ||
| Warnings:
 | ||
| Warning	1292	Truncated incorrect DECIMAL value: '`1'
 | ||
| SELECT * FROM v1 WHERE a <> 0 AND a = ' 1';
 | ||
| a
 | ||
| Warnings:
 | ||
| Warning	1292	Truncated incorrect DECIMAL value: '`1'
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (a ENUM('5','6'));
 | ||
| INSERT INTO t1 VALUES ('5'),('6');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| SELECT * FROM t1 WHERE a='5' AND a<2;
 | ||
| a
 | ||
| 5
 | ||
| SELECT * FROM v1 WHERE a='5' AND a<2;
 | ||
| a
 | ||
| 5
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-8742 Wrong result for SELECT..WHERE view_latin1_swedish_ci_field='a' COLLATE latin1_bin
 | ||
| #
 | ||
| CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
 | ||
| INSERT INTO t1 VALUES ('a'),('A');
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 WHERE a='a';
 | ||
| SELECT * FROM v1 WHERE a=_latin1'a' COLLATE latin1_bin;
 | ||
| a
 | ||
| a
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-9701: CREATE VIEW with GROUP BY or ORDER BY and constant
 | ||
| # produces invalid definition
 | ||
| #
 | ||
| CREATE TABLE t1 ( i INT );
 | ||
| INSERT INTO t1 VALUES (1),(2);
 | ||
| CREATE VIEW v1 AS
 | ||
| SELECT 3 AS three, COUNT(*) FROM t1 GROUP BY three;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 3 AS `three`,count(0) AS `COUNT(*)` from `t1` group by ''	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| three	COUNT(*)
 | ||
| 3	2
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-12819: order by ordering expression changed to empty string
 | ||
| # when creatin view with union
 | ||
| #
 | ||
| create table t1 (t1col1 int, t1col2 int,t1col3 int );
 | ||
| create table t2 (t2col1 int, t2col2 int, t2col3 int);
 | ||
| create view v1 as
 | ||
| select t1col1,t1col2,t1col3 from t1
 | ||
| union all
 | ||
| select t2col1,t2col2,t2col3 from t2
 | ||
| order by 2,3;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`t1col1` AS `t1col1`,`t1`.`t1col2` AS `t1col2`,`t1`.`t1col3` AS `t1col3` from `t1` union all select `t2`.`t2col1` AS `t2col1`,`t2`.`t2col2` AS `t2col2`,`t2`.`t2col3` AS `t2col3` from `t2` order by 2,3	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| t1col1	t1col2	t1col3
 | ||
| drop view v1;
 | ||
| drop table t1,t2;
 | ||
| #
 | ||
| # End of 10.1 tests
 | ||
| #
 | ||
| #
 | ||
| # Start of 10.2 tests
 | ||
| #
 | ||
| # Checking that SHOW CREATE VIEW preserve parentheses
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| INSERT INTO t1 VALUES (10),(20),(30);
 | ||
| CREATE VIEW v1 AS SELECT 1 AS a UNION SELECT a FROM t1;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `a` union select `t1`.`a` AS `a` from `t1`	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| 10
 | ||
| 20
 | ||
| 30
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT 1 AS a UNION SELECT a FROM t1 LIMIT 1;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `a` union select `t1`.`a` AS `a` from `t1` limit 1	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT 1 AS a UNION (SELECT a FROM t1);
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `a` union (select `t1`.`a` AS `a` from `t1`)	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| 10
 | ||
| 20
 | ||
| 30
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT 1 AS a UNION (SELECT a FROM t1 LIMIT 1);
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `a` union (select `t1`.`a` AS `a` from `t1` limit 1)	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| 10
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT 1 AS a UNION (SELECT a FROM t1) LIMIT 1;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `a` union (select `t1`.`a` AS `a` from `t1`) limit 1	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| a
 | ||
| 1
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-9408 CREATE TABLE SELECT MAX(int_column) creates different columns for table vs view
 | ||
| #
 | ||
| CREATE TABLE t1 (
 | ||
| id int(11) NOT NULL PRIMARY KEY,
 | ||
| country varchar(32),
 | ||
| code int(11) default NULL
 | ||
| );
 | ||
| INSERT INTO t1 VALUES (1,'ITALY',100),(2,'ITALY',200),(3,'FRANCE',100), (4,'ITALY',100);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| CREATE TABLE t2 AS
 | ||
| SELECT code, COUNT(DISTINCT country), MAX(id) FROM t1 GROUP BY code ORDER BY MAX(id);
 | ||
| SHOW CREATE TABLE t2;
 | ||
| Table	Create Table
 | ||
| t2	CREATE TABLE `t2` (
 | ||
|   `code` int(11) DEFAULT NULL,
 | ||
|   `COUNT(DISTINCT country)` bigint(21) NOT NULL,
 | ||
|   `MAX(id)` int(11)
 | ||
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
 | ||
| CREATE TABLE t3 AS
 | ||
| SELECT code, COUNT(DISTINCT country), MAX(id) FROM v1 GROUP BY code ORDER BY MAX(id);
 | ||
| SHOW CREATE TABLE t3;
 | ||
| Table	Create Table
 | ||
| t3	CREATE TABLE `t3` (
 | ||
|   `code` int(11) DEFAULT NULL,
 | ||
|   `COUNT(DISTINCT country)` bigint(21) NOT NULL,
 | ||
|   `MAX(id)` int(11) DEFAULT NULL
 | ||
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1,t2,t3;
 | ||
| #
 | ||
| # MDEV-3944: Allow derived tables in VIEWS
 | ||
| #
 | ||
| create table t1 (s1 int);
 | ||
| insert into t1 values (1),(2),(3);
 | ||
| CREATE VIEW v1 AS SELECT * FROM (SELECT s1 FROM t1 WHERE s1>1) AS x;
 | ||
| CREATE VIEW v2 AS SELECT * FROM (SELECT s1 FROM t1 WHERE s1<3) AS x;
 | ||
| select * from v1;
 | ||
| s1
 | ||
| 2
 | ||
| 3
 | ||
| select * from v2;
 | ||
| s1
 | ||
| 1
 | ||
| 2
 | ||
| select * from v1 natural join v2;
 | ||
| s1
 | ||
| 2
 | ||
| select * from v1 natural join t1;
 | ||
| s1
 | ||
| 2
 | ||
| 3
 | ||
| select * from v1 natural join (SELECT s1 FROM t1 WHERE s1<3) as x;
 | ||
| s1
 | ||
| 2
 | ||
| select * from v1 left join v2 on (v1.s1=v2.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| select * from v1 left join t1 on (v1.s1=t1.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	3
 | ||
| select * from t1 left join v2 on (t1.s1=v2.s1);
 | ||
| s1	s1
 | ||
| 1	1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| select * from v1 left join (SELECT s1 FROM t1 WHERE s1<3) as x on (v1.s1=x.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| select * from (SELECT s1 FROM t1 WHERE s1>1) AS x left join v2 on (x.s1=v2.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| drop view v1,v2;
 | ||
| CREATE VIEW v1 AS SELECT * FROM (SELECT s1 FROM (SELECT s1 FROM t1 WHERE s1
 | ||
| < 100) as xx WHERE s1>1) AS x;
 | ||
| CREATE VIEW v2 AS SELECT * FROM (SELECT s1 FROM (SELECT s1 FROM t1 WHERE s1
 | ||
| > -100) as xx WHERE s1<3) AS x;
 | ||
| insert into t1 values (200),(-200);
 | ||
| select * from t1;
 | ||
| s1
 | ||
| -200
 | ||
| 1
 | ||
| 2
 | ||
| 200
 | ||
| 3
 | ||
| select * from v1;
 | ||
| s1
 | ||
| 2
 | ||
| 3
 | ||
| select * from v2;
 | ||
| s1
 | ||
| 1
 | ||
| 2
 | ||
| select * from v1 natural join v2;
 | ||
| s1
 | ||
| 2
 | ||
| select * from v1 natural join t1;
 | ||
| s1
 | ||
| 2
 | ||
| 3
 | ||
| select * from v1 natural join (SELECT s1 FROM t1 WHERE s1<3) as x;
 | ||
| s1
 | ||
| 2
 | ||
| select * from v1 left join v2 on (v1.s1=v2.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| select * from v1 left join t1 on (v1.s1=t1.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	3
 | ||
| select * from t1 left join v2 on (t1.s1=v2.s1);
 | ||
| s1	s1
 | ||
| -200	NULL
 | ||
| 1	1
 | ||
| 2	2
 | ||
| 200	NULL
 | ||
| 3	NULL
 | ||
| select * from v1 left join (SELECT s1 FROM t1 WHERE s1<3) as x on (v1.s1=x.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| select * from (SELECT s1 FROM t1 WHERE s1>1) AS x left join v2 on (x.s1=v2.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 200	NULL
 | ||
| 3	NULL
 | ||
| drop view v1,v2;
 | ||
| CREATE algorithm=temptable VIEW v1 AS SELECT * FROM (SELECT s1 FROM (SELECT s1 FROM t1 WHERE s1
 | ||
| < 100) as xx WHERE s1>1) AS x;
 | ||
| CREATE algorithm=temptable VIEW v2 AS SELECT * FROM (SELECT s1 FROM (SELECT s1 FROM t1 WHERE s1
 | ||
| > -100) as xx WHERE s1<3) AS x;
 | ||
| select * from t1;
 | ||
| s1
 | ||
| -200
 | ||
| 1
 | ||
| 2
 | ||
| 200
 | ||
| 3
 | ||
| select * from v1;
 | ||
| s1
 | ||
| 2
 | ||
| 3
 | ||
| select * from v2;
 | ||
| s1
 | ||
| 1
 | ||
| 2
 | ||
| select * from v1 natural join v2;
 | ||
| s1
 | ||
| 2
 | ||
| select * from v1 natural join t1;
 | ||
| s1
 | ||
| 2
 | ||
| 3
 | ||
| select * from v1 natural join (SELECT s1 FROM t1 WHERE s1<3) as x;
 | ||
| s1
 | ||
| 2
 | ||
| select * from v1 left join v2 on (v1.s1=v2.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| select * from v1 left join t1 on (v1.s1=t1.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	3
 | ||
| select * from t1 left join v2 on (t1.s1=v2.s1);
 | ||
| s1	s1
 | ||
| -200	NULL
 | ||
| 1	1
 | ||
| 2	2
 | ||
| 200	NULL
 | ||
| 3	NULL
 | ||
| select * from v1 left join (SELECT s1 FROM t1 WHERE s1<3) as x on (v1.s1=x.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 3	NULL
 | ||
| select * from (SELECT s1 FROM t1 WHERE s1>1) AS x left join v2 on (x.s1=v2.s1);
 | ||
| s1	s1
 | ||
| 2	2
 | ||
| 200	NULL
 | ||
| 3	NULL
 | ||
| drop view v1,v2;
 | ||
| CREATE VIEW v1 AS SELECT * FROM (SELECT s1 FROM (SELECT s1 FROM t1 WHERE s1
 | ||
| < 100) as xx WHERE s1>1) AS x;
 | ||
| insert into v1 values (-300);
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| update v1 set s1=s1+1;
 | ||
| ERROR HY000: The target table v1 of the UPDATE is not updatable
 | ||
| drop view v1;
 | ||
| CREATE VIEW v1 AS SELECT s1,s2 FROM (SELECT s1 as s2 FROM t1 WHERE s1 <
 | ||
| 100) x, t1 WHERE t1.s1=x.s2;
 | ||
| select * from v1;
 | ||
| s1	s2
 | ||
| 1	1
 | ||
| 2	2
 | ||
| 3	3
 | ||
| -200	-200
 | ||
| insert into v1 (s1) values (-300);
 | ||
| update v1 set s1=s1+1;
 | ||
| select * from v1;
 | ||
| s1	s2
 | ||
| 2	2
 | ||
| 3	3
 | ||
| 4	4
 | ||
| -199	-199
 | ||
| -299	-299
 | ||
| select * from t1;
 | ||
| s1
 | ||
| 2
 | ||
| 3
 | ||
| 4
 | ||
| 200
 | ||
| -199
 | ||
| -299
 | ||
| insert into v1(s2) values (-300);
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| update v1 set s2=s2+1;
 | ||
| ERROR HY000: The target table v1 of the UPDATE is not updatable
 | ||
| drop view v1;
 | ||
| CREATE VIEW v1 AS SELECT * FROM (SELECT s1 FROM t1 WHERE s1
 | ||
| < 100) AS x;
 | ||
| insert into v1 values (-300);
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| update v1 set s1=s1+1;
 | ||
| ERROR HY000: The target table v1 of the UPDATE is not updatable
 | ||
| drop view v1;
 | ||
| CREATE VIEW v1 AS SELECT * FROM (SELECT s1 FROM (SELECT s1 FROM t1 WHERE s1
 | ||
| < 100) as xx WHERE s1>1) AS x;
 | ||
| insert into v1 values (-300);
 | ||
| ERROR HY000: The target table v1 of the INSERT is not insertable-into
 | ||
| update v1 set s1=s1+1;
 | ||
| ERROR HY000: The target table v1 of the UPDATE is not updatable
 | ||
| create view v2 as select * from v1;
 | ||
| insert into v2 values (-300);
 | ||
| ERROR HY000: The target table v2 of the INSERT is not insertable-into
 | ||
| update v2 set s1=s1+1;
 | ||
| ERROR HY000: The target table v2 of the UPDATE is not updatable
 | ||
| drop view v1, v2;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-9671:Wrong result upon select from a view with a FROM subquery
 | ||
| #
 | ||
| CREATE TABLE t1 (i INT);
 | ||
| INSERT INTO t1 VALUES (3),(2);
 | ||
| CREATE TABLE t2 (j INT);
 | ||
| INSERT INTO t2 VALUES (8),(3),(3);
 | ||
| CREATE TABLE t3 (k INT);
 | ||
| INSERT INTO t3 VALUES (1),(8);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 LEFT JOIN ( SELECT t2.* FROM t2 INNER JOIN t3 ON ( k = j ) ) AS alias1 ON ( i = j );
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`i` AS `i`,`alias1`.`j` AS `j` from (`t1` left join (select `t2`.`j` AS `j` from (`t2` join `t3` on(`t3`.`k` = `t2`.`j`))) `alias1` on(`t1`.`i` = `alias1`.`j`))	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM t1 LEFT JOIN ( SELECT t2.* FROM t2 INNER JOIN t3 ON ( k = j ) ) AS alias1 ON ( i = j );
 | ||
| i	j
 | ||
| 3	NULL
 | ||
| 2	NULL
 | ||
| SELECT * FROM v1;
 | ||
| i	j
 | ||
| 3	NULL
 | ||
| 2	NULL
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1, t2, t3;
 | ||
| #
 | ||
| # MDEV-10035: DBUG_ASSERT on CREATE VIEW v1 AS SELECT * FROM t1
 | ||
| # FOR UPDATE
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT);
 | ||
| insert into t1 values (1),(2);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 FOR UPDATE;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` for update	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| DROP VIEW v1;
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 LOCK IN SHARE MODE;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` lock in share mode	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-10724:Assertion `vcol_table == 0 || vcol_table == table'
 | ||
| # failed in fill_record(THD*, TABLE*, List<Item>&, List<Item>&,
 | ||
| # bool, bool)
 | ||
| #
 | ||
| CREATE TABLE t1 (f1 INT);
 | ||
| CREATE TABLE t2 (f2 INT);
 | ||
| CREATE TABLE t3 (f3 INT);
 | ||
| CREATE ALGORITHM = MERGE VIEW v AS SELECT f1, f3 FROM t1,
 | ||
| ( SELECT f3 FROM t2, t3 ) AS sq;
 | ||
| INSERT INTO v (f1, f3) VALUES (1,1), (2,2);
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v'
 | ||
| drop view v;
 | ||
| drop tables t1,t2,t3;
 | ||
| #
 | ||
| # MDEV-10704: Assertion `field->field->table == table_arg'
 | ||
| # failed in fill_record(THD*, TABLE*, List<Item>&, List<Item>&,
 | ||
| # bool, bool)
 | ||
| #
 | ||
| CREATE TABLE t1 (i INT);
 | ||
| CREATE TABLE t2 (j INT);
 | ||
| CREATE TABLE t3 (k INT);
 | ||
| CREATE ALGORITHM = MERGE VIEW v AS SELECT j AS f1, k AS f2 FROM ( SELECT j FROM t1, t2 ) sq, t3;
 | ||
| REPLACE INTO v (f1,f2) VALUES (1,1);
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v'
 | ||
| drop view v;
 | ||
| drop table t1,t2,t3;
 | ||
| #
 | ||
| # MDEV-12379: Server crashes in TABLE_LIST::is_with_table on
 | ||
| # SHOW CREATE VIEW
 | ||
| #
 | ||
| CREATE TABLE t (i INT);
 | ||
| CREATE VIEW v AS SELECT * FROM ( SELECT * FROM t ) sq;
 | ||
| DROP TABLE IF EXISTS t;
 | ||
| SHOW CREATE VIEW v;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `sq`.`i` AS `i` from (select `test`.`t`.`i` AS `i` from `test`.`t`) `sq`	latin1	latin1_swedish_ci
 | ||
| Warnings:
 | ||
| Warning	1356	View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| DROP VIEW v;
 | ||
| #
 | ||
| # MDEV-13439: Database permissions are not enough to run a subquery
 | ||
| # with GROUP BY within a view
 | ||
| #
 | ||
| create database test_db;
 | ||
| use test_db;
 | ||
| create table t (i int);
 | ||
| create user foo@localhost;
 | ||
| grant all on test_db.* to foo@localhost;
 | ||
| connect  con1,localhost,foo,,;
 | ||
| use test_db;
 | ||
| create view v as select * from (select i from t group by i) sq;
 | ||
| select * from v;
 | ||
| i
 | ||
| disconnect con1;
 | ||
| connection default;
 | ||
| use test;
 | ||
| drop database test_db;
 | ||
| drop user foo@localhost;
 | ||
| #
 | ||
| # MDEV-13523: Group By in a View, called within a Stored Routine
 | ||
| # causes Error Code 1356 when a non-root user runs the routine for
 | ||
| # a second time
 | ||
| #
 | ||
| CREATE DATABASE bugTest;
 | ||
| USE bugTest;
 | ||
| CREATE TABLE `procViewTable` (`id` int(10), `someText` varchar(50) NOT NULL);
 | ||
| insert  into `procViewTable` values (1,'Test'), (2,'Test 2');
 | ||
| CREATE USER 'procView'@'%';
 | ||
| GRANT ALL PRIVILEGES ON `bugTest`.* TO 'procView'@'%';
 | ||
| CREATE DEFINER=`procView`@`%` VIEW `procViewSimple` AS (
 | ||
| select * from (
 | ||
| select `id` from `bugTest`.`procViewTable`
 | ||
|   ) `innerQuery`
 | ||
|   group by `innerQuery`.`id`
 | ||
| );
 | ||
| connect  con1,localhost,procView,,;
 | ||
| use bugTest;
 | ||
| prepare stmt from "SELECT * FROM procViewSimple";
 | ||
| execute stmt;
 | ||
| id
 | ||
| 1
 | ||
| 2
 | ||
| execute stmt;
 | ||
| id
 | ||
| 1
 | ||
| 2
 | ||
| disconnect con1;
 | ||
| connection default;
 | ||
| drop user procView;
 | ||
| drop view procViewSimple;
 | ||
| drop table procViewTable;
 | ||
| use test;
 | ||
| drop database bugTest;
 | ||
| #
 | ||
| # MDEV-13436: PREPARE doesn't work as expected & throws errors but
 | ||
| # MySQL is working fine
 | ||
| #
 | ||
| create table t1 (a int);
 | ||
| insert into t1 values (1),(2);
 | ||
| SET @sql_query = "
 | ||
|   CREATE VIEW v1 AS
 | ||
|     SELECT * FROM (
 | ||
|           SELECT CASE WHEN 1 IN (SELECT a from t1 where a < 2) THEN TRUE END AS testcase
 | ||
|     ) testalias
 | ||
| ";
 | ||
| PREPARE stmt FROM @sql_query;
 | ||
| EXECUTE stmt;
 | ||
| DEALLOCATE PREPARE stmt;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `testalias`.`testcase` AS `testcase` from (select case when 1 in (select `t1`.`a` from `t1` where `t1`.`a` < 2) then 1 end AS `testcase`) `testalias`	latin1	latin1_swedish_ci
 | ||
| SELECT * FROM v1;
 | ||
| testcase
 | ||
| 1
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-18502: Server crash in find_field_in_tables upon 2nd execution of SP which causes ER_WRONG_GROUP_FIELD
 | ||
| #
 | ||
| CREATE TABLE t1 (id INT, f VARCHAR(1));
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1;
 | ||
| INSERT INTO t1 VALUES (1,'a'),(2,'b');
 | ||
| CREATE PROCEDURE sp() SELECT f AS f1, MAX(id) AS f2 FROM v1 GROUP BY f1, f2 ORDER BY f1;
 | ||
| CALL sp;
 | ||
| ERROR 42000: Can't group on 'f2'
 | ||
| CALL sp;
 | ||
| ERROR 42000: Can't group on 'f2'
 | ||
| DROP PROCEDURE sp;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-24314: create view with derived table without default database
 | ||
| #
 | ||
| create database dummy;
 | ||
| use dummy;
 | ||
| drop database dummy;
 | ||
| create database db1;
 | ||
| create table db1.t1 (a int);
 | ||
| insert into db1.t1 values (3),(7),(1);
 | ||
| create view db1.v1 as select * from (select * from db1.t1) t;
 | ||
| show create view db1.v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `db1`.`v1` AS select `t`.`a` AS `a` from (select `db1`.`t1`.`a` AS `a` from `db1`.`t1`) `t`	latin1	latin1_swedish_ci
 | ||
| select * from db1.v1;
 | ||
| a
 | ||
| 3
 | ||
| 7
 | ||
| 1
 | ||
| drop view db1.v1;
 | ||
| prepare stmt from "
 | ||
| create view db1.v1 as select * from (select * from db1.t1) t;
 | ||
| ";
 | ||
| execute stmt;
 | ||
| deallocate prepare stmt;
 | ||
| show create view db1.v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `db1`.`v1` AS select `t`.`a` AS `a` from (select `db1`.`t1`.`a` AS `a` from `db1`.`t1`) `t`	latin1	latin1_swedish_ci
 | ||
| select * from db1.v1;
 | ||
| a
 | ||
| 3
 | ||
| 7
 | ||
| 1
 | ||
| drop view db1.v1;
 | ||
| drop table db1.t1;
 | ||
| drop database db1;
 | ||
| use test;
 | ||
| #
 | ||
| # MDEV-16940: update of multi-table view returning error used in SP
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t1 VALUES (1), (2);
 | ||
| CREATE TABLE t2 (b INT) ENGINE=MyISAM;
 | ||
| INSERT INTO t2 VALUES (2), (3);
 | ||
| CREATE VIEW v1 AS SELECT a, b FROM t1,t2;
 | ||
| CREATE PROCEDURE sp1() UPDATE v1 SET a = 8, b = 9;
 | ||
| CALL sp1;
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v1'
 | ||
| CALL sp1;
 | ||
| ERROR HY000: Can not modify more than one base table through a join view 'test.v1'
 | ||
| DROP PROCEDURE sp1;
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1, t2;
 | ||
| #
 | ||
| # MDEV-23291: SUM column from a derived table returns invalid values
 | ||
| #
 | ||
| CREATE TABLE t1(a INT, b INT);
 | ||
| INSERT INTO t1 VALUES (1,1), (2,2);
 | ||
| CREATE view v1 AS
 | ||
| SELECT a as x, (select x) as y, (select y) as z FROM t1;
 | ||
| SELECT sum(z) FROM (SELECT a as x, (select x) as y, (select y) as z FROM t1) q;
 | ||
| sum(z)
 | ||
| 3
 | ||
| SELECT sum(z) FROM v1;
 | ||
| sum(z)
 | ||
| 3
 | ||
| DROP TABLE t1;
 | ||
| DROP VIEW v1;
 | ||
| #
 | ||
| # MDEV-26299: Some views force server (and mysqldump) to generate
 | ||
| # invalid SQL for their definitions
 | ||
| #
 | ||
| create view v1 as
 | ||
| select * from
 | ||
| (select
 | ||
| "12345678901234567890123456789012345678901234567890123456789012345") as t1;
 | ||
| drop view v1;
 | ||
| CREATE VIEW v1 AS select `t1`.`12345678901234567890123456789012345678901234567890123456789012345` AS `Name_exp_1` from (select '12345678901234567890123456789012345678901234567890123456789012345') `t1`;
 | ||
| drop view v1;
 | ||
| #
 | ||
| # MDEV-25631: view with outer reference in select used
 | ||
| #             as argument of set function
 | ||
| #
 | ||
| create table t1 (c int);
 | ||
| insert into t1 values (1);
 | ||
| create view v1 as select c from t1 where (select t1.c from t1 t) = 1;
 | ||
| select * from (select sum((select * from v1)) as r) dt;
 | ||
| r
 | ||
| 1
 | ||
| with cte as (select c from t1 where (select t1.c from t1 t) = 1)
 | ||
| select * from (select sum((select * from cte)) as r) dt1
 | ||
| union
 | ||
| select * from (select sum((select * from cte)) as r) dt2;
 | ||
| r
 | ||
| 1
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-17124: mariadb 10.1.34, views and prepared statements:
 | ||
| # ERROR 1615 (HY000): Prepared statement needs to be re-prepared
 | ||
| #
 | ||
| set @tdc= @@table_definition_cache, @tc= @@table_open_cache;
 | ||
| set global table_definition_cache= 400, table_open_cache= 400;
 | ||
| create table tt (a int, primary key(a)) engine=MyISAM;
 | ||
| create view v as select * from tt;
 | ||
| insert into tt values(1),(2),(3),(4);
 | ||
| prepare stmt from 'select * from tt';
 | ||
| #fill table definition cache
 | ||
| execute stmt;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| 4
 | ||
| prepare stmt from 'select * from v';
 | ||
| execute stmt;
 | ||
| a
 | ||
| 1
 | ||
| 2
 | ||
| 3
 | ||
| 4
 | ||
| drop database db;
 | ||
| drop view v;
 | ||
| drop table tt;
 | ||
| set global table_definition_cache= @tdc, table_open_cache= @tc;
 | ||
| #
 | ||
| # End of 10.2 tests
 | ||
| #
 | ||
| #
 | ||
| # Start of 10.3 tests
 | ||
| #
 | ||
| #
 | ||
| # MDEV-13197 Parser refactoring for CREATE VIEW,TRIGGER,SP,UDF,EVENT
 | ||
| #
 | ||
| ALTER VIEW IF NOT EXISTS v1 AS SELECT 1;
 | ||
| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IF NOT EXISTS v1 AS SELECT 1' at line 1
 | ||
| #
 | ||
| # MDEV-18605: Loss of column aliases by using view and group
 | ||
| #
 | ||
| CREATE TABLE t1 (id int, foo int);
 | ||
| CREATE VIEW v1 AS  SELECT id, IFNULL(foo,'') AS foo FROM t1;
 | ||
| INSERT INTO t1 (id, foo) VALUES (1,1),(2,2);
 | ||
| SELECT v.id, v.foo AS bar  FROM v1 v
 | ||
| WHERE id = 2;
 | ||
| id	bar
 | ||
| 2	2
 | ||
| SELECT v.id, v.foo AS bar  FROM v1 v
 | ||
| GROUP BY v.id;
 | ||
| id	bar
 | ||
| 1	1
 | ||
| 2	2
 | ||
| SELECT v.id, v.foo AS bar  FROM v1 v
 | ||
| WHERE id = 2
 | ||
| GROUP BY v.id;
 | ||
| id	bar
 | ||
| 2	2
 | ||
| Drop View v1;
 | ||
| Drop table t1;
 | ||
| #
 | ||
| # MDEV-24281: Execution of PREPARE from CREATE VIEW statement
 | ||
| #
 | ||
| create table t1 (s1 int);
 | ||
| insert into t1 values (3), (7), (1);
 | ||
| prepare stmt from "
 | ||
| create view v1 as select 's1', s1, 1 as My_exp_s1 from t1;
 | ||
| ";
 | ||
| execute stmt;
 | ||
| deallocate prepare stmt;
 | ||
| show create view v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 's1' AS `My_exp_1_s1`,`t1`.`s1` AS `s1`,1 AS `My_exp_s1` from `t1`	latin1	latin1_swedish_ci
 | ||
| select * from v1;
 | ||
| My_exp_1_s1	s1	My_exp_s1
 | ||
| s1	3	1
 | ||
| s1	7	1
 | ||
| s1	1	1
 | ||
| drop view v1;
 | ||
| prepare stmt from "
 | ||
| create view v1 as select 's1', s1, 1 as My_exp_s1 from t1;
 | ||
| ";
 | ||
| execute stmt;
 | ||
| execute stmt;
 | ||
| ERROR 42S01: Table 'v1' already exists
 | ||
| deallocate prepare stmt;
 | ||
| drop view v1;
 | ||
| drop table t1;
 | ||
| #
 | ||
| # MDEV-28696 View created as "select b''; " references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| #
 | ||
| CREATE VIEW v1 as select b'';
 | ||
| SELECT * FROM v1;
 | ||
| b''
 | ||
| 
 | ||
| DROP VIEW v1;
 | ||
| #
 | ||
| # End of 10.3 tests
 | ||
| #
 | ||
| #
 | ||
| # MDEV-25206: view specification contains unknown column reference
 | ||
| #
 | ||
| CREATE TABLE t1 (a int);
 | ||
| INSERT INTO t1 VALUES (1),(2);
 | ||
| CREATE TABLE t2 (b int);
 | ||
| INSERT INTO t2 VALUES (2),(3);
 | ||
| CREATE TABLE t3 (c int);
 | ||
| CREATE VIEW v1 AS SELECT * FROM t1 JOIN t2 ON t1.x > t2.b;
 | ||
| ERROR 42S22: Unknown column 't1.x' in 'ON'
 | ||
| INSERT INTO t3 SELECT * FROM t1 JOIN t2 ON t1.x > t2.b;
 | ||
| ERROR 42S22: Unknown column 't1.x' in 'ON'
 | ||
| CREATE TABLE t4 AS SELECT * FROM t1 JOIN t2 ON t1.x > t2.b;
 | ||
| ERROR 42S22: Unknown column 't1.x' in 'ON'
 | ||
| DROP TABLE t1,t2,t3;
 | ||
| #
 | ||
| # MDEV-29088: view specification contains unknown column in ON condition
 | ||
| #
 | ||
| create table t1 (a int);
 | ||
| create table t2 (b int);
 | ||
| create table t3 (c int);
 | ||
| create view v as
 | ||
| select * from t1 left join t2 on t1.a=t2.b and t1.a in (select d from t3);
 | ||
| ERROR 42S22: Unknown column 'd' in 'SELECT'
 | ||
| create algorithm=merge view v as
 | ||
| select * from t1 left join t2 on t1.a=t2.b and t1.a in (select d from t3);
 | ||
| ERROR 42S22: Unknown column 'd' in 'SELECT'
 | ||
| drop table t1,t2,t3;
 | ||
| #
 | ||
| # MDEV-31189: Server crash or assertion failure in upon 2nd
 | ||
| # execution of PS with views and HAVING
 | ||
| #
 | ||
| CREATE TABLE t (f INT);
 | ||
| INSERT INTO t VALUES (1),(2);
 | ||
| CREATE VIEW v1 AS SELECT 1 AS a;
 | ||
| CREATE VIEW v2 AS SELECT a FROM v1;
 | ||
| PREPARE stmt FROM "SELECT * FROM v2 HAVING 1 IN (SELECT f FROM t)";
 | ||
| EXECUTE stmt;
 | ||
| a
 | ||
| 1
 | ||
| EXECUTE stmt;
 | ||
| a
 | ||
| 1
 | ||
| DROP VIEW v1;
 | ||
| DROP VIEW v2;
 | ||
| DROP TABLE t;
 | ||
| # End of 10.4 tests
 | ||
| #
 | ||
| # MDEV-29537: Creation of view with UNION and SELECT ... FOR UPDATE
 | ||
| # in definition is failed with error
 | ||
| #
 | ||
| CREATE TABLE t1 (i INT);
 | ||
| CREATE VIEW v1 AS SELECT 1 FROM t1
 | ||
| UNION
 | ||
| SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
 | ||
| FOR UPDATE;
 | ||
| SELECT * FROM v1;
 | ||
| 1
 | ||
| 1
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` from `t1` union select 1 AS `1` from DUAL  where 1 group by 1 having 1 order by 1 for update	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| CREATE TABLE t1 (i INT);
 | ||
| CREATE VIEW v1 AS SELECT 1 FROM t1
 | ||
| UNION
 | ||
| (SELECT 1 FROM DUAL WHERE 1 GROUP BY 1 HAVING 1 ORDER BY 1
 | ||
| FOR UPDATE);
 | ||
| SELECT * FROM v1;
 | ||
| 1
 | ||
| 1
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` from `t1` union (select 1 AS `1` from DUAL  where 1 group by 1 having 1 for update)	latin1	latin1_swedish_ci
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1;
 | ||
| #
 | ||
| # MDEV-35090: (Item_func_current_user) Assertion
 | ||
| # `typeid(*copy) == typeid(*this)' failed in
 | ||
| # Item_func_or_sum::do_build_clone
 | ||
| #
 | ||
| CREATE VIEW v AS SELECT 1;
 | ||
| SELECT * FROM v WHERE UpdateXML('<user>N/A</user>','/a',CURRENT_USER());
 | ||
| 1
 | ||
| Warnings:
 | ||
| Warning	1292	Truncated incorrect BOOLEAN value: '<user>N/A</user>'
 | ||
| DROP VIEW v;
 | ||
| # End of 10.5 tests
 | ||
| #
 | ||
| # MDEV-13115: SELECT .. SKIP LOCKED - ensure SHOW CREATE VIEW is correct
 | ||
| #
 | ||
| CREATE TABLE t1 (id int, foo int);
 | ||
| CREATE VIEW v1 AS  SELECT id, IFNULL(foo,'') AS foo FROM t1 LOCK IN SHARE MODE;
 | ||
| CREATE VIEW v2 AS  SELECT id, IFNULL(foo,'') AS foo FROM t1 FOR UPDATE;
 | ||
| CREATE VIEW v3 AS  SELECT id, IFNULL(foo,'') AS foo FROM t1 LOCK IN SHARE MODE SKIP LOCKED;
 | ||
| CREATE VIEW v4 AS  SELECT id, IFNULL(foo,'') AS foo FROM t1 FOR UPDATE SKIP LOCKED;
 | ||
| SHOW CREATE VIEW v1;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`id` AS `id`,ifnull(`t1`.`foo`,'') AS `foo` from `t1` lock in share mode	latin1	latin1_swedish_ci
 | ||
| SHOW CREATE VIEW v2;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`id` AS `id`,ifnull(`t1`.`foo`,'') AS `foo` from `t1` for update	latin1	latin1_swedish_ci
 | ||
| SHOW CREATE VIEW v3;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`id` AS `id`,ifnull(`t1`.`foo`,'') AS `foo` from `t1` lock in share mode skip locked	latin1	latin1_swedish_ci
 | ||
| SHOW CREATE VIEW v4;
 | ||
| View	Create View	character_set_client	collation_connection
 | ||
| v4	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `t1`.`id` AS `id`,ifnull(`t1`.`foo`,'') AS `foo` from `t1` for update skip locked	latin1	latin1_swedish_ci
 | ||
| Drop View v1;
 | ||
| Drop View v2;
 | ||
| Drop View v3;
 | ||
| Drop View v4;
 | ||
| Drop table t1;
 | ||
| #
 | ||
| # MDEV-26456: SIGSEGV in flush_tables_with_read_lock on FLUSH TABLE
 | ||
| #
 | ||
| CREATE FUNCTION f() RETURNS INT RETURN (SELECT 1 FROM t);
 | ||
| CREATE VIEW v AS SELECT f();
 | ||
| SELECT * FROM v;
 | ||
| ERROR HY000: View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| FLUSH TABLE v WITH READ LOCK;
 | ||
| UNLOCK TABLES;
 | ||
| FLUSH TABLES v FOR EXPORT;
 | ||
| UNLOCK TABLES;
 | ||
| SELECT * FROM v;
 | ||
| ERROR HY000: View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 | ||
| DROP VIEW v;
 | ||
| DROP FUNCTION f;
 | ||
| #
 | ||
| # MDEV-32164 Server crashes in JOIN::cleanup after erroneous query with
 | ||
| # view
 | ||
| #
 | ||
| CREATE TABLE t1 (a INT, b INT, KEY (a,b)) ENGINE=InnoDB;
 | ||
| CREATE VIEW v1 AS SELECT a FROM t1 WHERE a != '' GROUP BY a;
 | ||
| INSERT INTO t1 VALUES (1,NULL),(2,0),(3,NULL);
 | ||
| CREATE TABLE t2 (c INT) ENGINE=InnoDB;
 | ||
| CREATE TEMPORARY TABLE tmp SELECT v1.a FROM v1 JOIN t2 ON (v1.a = t2.c);
 | ||
| ERROR 22007: Truncated incorrect DECIMAL value: ''
 | ||
| DROP VIEW v1;
 | ||
| DROP TABLE t1, t2;
 | ||
| #
 | ||
| # End of 10.6 tests
 | ||
| #
 | ||
| #
 | ||
| # MDEV-29587: Allowing insert into a view with columns that
 | ||
| # are not part the table
 | ||
| #
 | ||
| # view with 2 the same fields
 | ||
| CREATE TABLE table1 (x INT);
 | ||
| CREATE VIEW view1 AS SELECT x, x as x1 FROM table1;
 | ||
| INSERT INTO view1(x) VALUES (1);
 | ||
| INSERT INTO view1(x1) VALUES (1);
 | ||
| INSERT INTO view1(x1,x) VALUES (1,1);
 | ||
| ERROR HY000: The target table view1 of the INSERT is not insertable-into
 | ||
| DROP VIEW view1;
 | ||
| DROP TABLE table1;
 | ||
| # view with a field and expression over the field
 | ||
| CREATE TABLE table1 (x INT);
 | ||
| CREATE VIEW view1 AS SELECT x, x + 1 as x1 FROM table1;
 | ||
| INSERT INTO view1(x) VALUES (1);
 | ||
| INSERT INTO view1(x1) VALUES (1);
 | ||
| ERROR HY000: The target table view1 of the INSERT is not insertable-into
 | ||
| INSERT INTO view1(x1,x) VALUES (1,1);
 | ||
| ERROR HY000: The target table view1 of the INSERT is not insertable-into
 | ||
| DROP VIEW view1;
 | ||
| DROP TABLE table1;
 | ||
| # view with a field and collation expression over the field
 | ||
| CREATE TABLE table1 (x char(20));
 | ||
| CREATE VIEW view1 AS SELECT x, x collate latin1_german1_ci as x1 FROM table1;
 | ||
| INSERT INTO view1(x) VALUES ("ua");
 | ||
| # we can insert in the field with collation
 | ||
| INSERT INTO view1(x1) VALUES ("ua");
 | ||
| INSERT INTO view1(x1,x) VALUES ("ua","ua");
 | ||
| ERROR HY000: The target table view1 of the INSERT is not insertable-into
 | ||
| DROP VIEW view1;
 | ||
| DROP TABLE table1;
 | ||
| # view with a field and expression over other field
 | ||
| CREATE TABLE table1 (x INT, y INT);
 | ||
| CREATE VIEW view1 AS SELECT x, y + 1 as x1 FROM table1;
 | ||
| INSERT INTO view1(x) VALUES (1);
 | ||
| INSERT INTO view1(x1) VALUES (1);
 | ||
| ERROR HY000: The target table view1 of the INSERT is not insertable-into
 | ||
| INSERT INTO view1(x1,x) VALUES (1,1);
 | ||
| ERROR HY000: The target table view1 of the INSERT is not insertable-into
 | ||
| DROP VIEW view1;
 | ||
| DROP TABLE table1;
 | ||
| #
 | ||
| # End of 10.11 test
 | ||
| #
 | ||
| ALTER DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
 | 
