mariadb/mysql-test/r/truncate.result
unknown 0b54001b21 Bug#5507: TRUNCATE does not work with views.
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.
2007-04-12 23:21:37 +05:00

82 lines
1.8 KiB
Text

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;