mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +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.
		
			
				
	
	
		
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
# Test of truncate
 | 
						|
#
 | 
						|
--disable_warnings
 | 
						|
drop table if exists t1;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
create table t1 (a integer, b integer,c1 CHAR(10));
 | 
						|
insert into t1 (a) values (1),(2);
 | 
						|
truncate table t1;
 | 
						|
select count(*) from t1;
 | 
						|
insert into t1 values(1,2,"test");
 | 
						|
select count(*) from t1;
 | 
						|
delete from t1;
 | 
						|
select * from t1;
 | 
						|
drop table t1;
 | 
						|
# The following should fail
 | 
						|
--error 1146
 | 
						|
select count(*) from t1;
 | 
						|
create temporary table t1 (n int);
 | 
						|
insert into t1 values (1),(2),(3);
 | 
						|
truncate table t1;
 | 
						|
select * from t1;
 | 
						|
drop table t1;
 | 
						|
--error 1146
 | 
						|
truncate non_existing_table;
 | 
						|
 | 
						|
#
 | 
						|
# test autoincrement with TRUNCATE; verifying difference with DELETE
 | 
						|
#
 | 
						|
 | 
						|
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;
 | 
						|
delete from t1;
 | 
						|
insert into t1 (a) values (NULL),(NULL);
 | 
						|
SELECT * from t1;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
# Verifying that temp tables are handled the same way
 | 
						|
 | 
						|
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;
 | 
						|
delete from t1;
 | 
						|
insert into t1 (a) values (NULL),(NULL);
 | 
						|
SELECT * from t1;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
# End of 4.1 tests
 | 
						|
 | 
						|
# Test for Bug#5507 "TRUNCATE should work with views"
 | 
						|
 | 
						|
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;
 | 
						|
 | 
						|
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;
 | 
						|
select * from v2;
 | 
						|
delete from t1;
 | 
						|
 | 
						|
# The following should fail
 | 
						|
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;
 | 
						|
--error 1395
 | 
						|
truncate table v3; 
 | 
						|
 | 
						|
# The following should fail
 | 
						|
create view v4 as select * from t1 limit 1,1; 
 | 
						|
--error 1288
 | 
						|
truncate table v4;
 | 
						|
 | 
						|
drop view v1, v2, v3, v4;
 | 
						|
drop table t1, t2;
 | 
						|
 | 
						|
# End of 5.0 tests
 |