mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-25 18:38:00 +03:00 
			
		
		
		
	Support of views wasn't implemented for the TRUNCATE statement. Now TRUNCATE on views has the same semantics as DELETE FROM view: mysql_truncate() checks whether the table is a view and falls back to delete if so. In order to initialize properly the LEX::updatable for a view st_lex::can_use_merged() now allows usage of merged views for the TRUNCATE statement. mysql-test/r/truncate.result: Added a test case for the Bug#5507: TRUNCATE does not work with views. mysql-test/t/truncate.test: Added a test case for the Bug#5507: TRUNCATE does not work with views. sql/sql_lex.cc: Bug#5507: TRUNCATE does not work with views. can_use_merged() was denying of usage of merged views for a TRUNCATE statement. This results in improper initialization of view LEX::updatable. Fixed. sql/sql_delete.cc: Bug#5507: TRUNCATE does not work with views. 1.mysql_truncate() was lacking of check whether the table is view. Added. 2.mysql_truncate() calls mysql_delete(), but mysql_delete() always reports errors as "DELETE" errors. Fixed. mysql-test/t/view.test: Updated test case for Bug#14540: OPTIMIZE, ANALYZE, REPAIR applied to not a view. mysql-test/r/view.result: Updated test case for Bug#14540: OPTIMIZE, ANALYZE, REPAIR applied to not a view.
		
			
				
	
	
		
			83 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| drop table if exists t1;
 | |
| create table t1 (a integer, b integer,c1 CHAR(10));
 | |
| insert into t1 (a) values (1),(2);
 | |
| truncate table t1;
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 0
 | |
| insert into t1 values(1,2,"test");
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 1
 | |
| delete from t1;
 | |
| select * from t1;
 | |
| a	b	c1
 | |
| drop table t1;
 | |
| select count(*) from t1;
 | |
| ERROR 42S02: Table 'test.t1' doesn't exist
 | |
| create temporary table t1 (n int);
 | |
| insert into t1 values (1),(2),(3);
 | |
| truncate table t1;
 | |
| select * from t1;
 | |
| n
 | |
| drop table t1;
 | |
| truncate non_existing_table;
 | |
| ERROR 42S02: Table 'test.non_existing_table' doesn't exist
 | |
| create table t1 (a integer auto_increment primary key);
 | |
| insert into t1 (a) values (NULL),(NULL);
 | |
| truncate table t1;
 | |
| insert into t1 (a) values (NULL),(NULL);
 | |
| SELECT * from t1;
 | |
| a
 | |
| 1
 | |
| 2
 | |
| delete from t1;
 | |
| insert into t1 (a) values (NULL),(NULL);
 | |
| SELECT * from t1;
 | |
| a
 | |
| 3
 | |
| 4
 | |
| drop table t1;
 | |
| create temporary table t1 (a integer auto_increment primary key);
 | |
| insert into t1 (a) values (NULL),(NULL);
 | |
| truncate table t1;
 | |
| insert into t1 (a) values (NULL),(NULL);
 | |
| SELECT * from t1;
 | |
| a
 | |
| 1
 | |
| 2
 | |
| delete from t1;
 | |
| insert into t1 (a) values (NULL),(NULL);
 | |
| SELECT * from t1;
 | |
| a
 | |
| 3
 | |
| 4
 | |
| drop table t1;
 | |
| create table t1 (s1 int);
 | |
| insert into t1 (s1) values (1), (2), (3), (4), (5);
 | |
| create view v1 as select * from t1;
 | |
| truncate table v1;
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 0
 | |
| insert into t1 (s1) values (1), (2), (3), (4), (5);
 | |
| create view v2 as select * from t1 where s1 > 3;
 | |
| truncate table v2;
 | |
| select * from t1;
 | |
| s1
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| select * from v2;
 | |
| s1
 | |
| delete from t1;
 | |
| create table t2 (s1 int, s2 int);
 | |
| create view v3 as select a.s1, b.s2 from t1 a join t2 b on a.s1 = b.s1 where a.s1 > 3;
 | |
| truncate table v3;
 | |
| ERROR HY000: Can not delete from join view 'test.v3'
 | |
| create view v4 as select * from t1 limit 1,1;
 | |
| truncate table v4;
 | |
| ERROR HY000: The target table v4 of the TRUNCATE is not updatable
 | |
| drop view v1, v2, v3, v4;
 | |
| drop table t1, t2;
 |