summaryrefslogtreecommitdiff
path: root/mysql-test/t/truncate.test
diff options
context:
space:
mode:
authorunknown <gshchepa/uchum@gshchepa.localdomain>2007-04-12 23:21:37 +0500
committerunknown <gshchepa/uchum@gshchepa.localdomain>2007-04-12 23:21:37 +0500
commit0b54001b21e56ceb04d80eeeadbb62a04b04d34f (patch)
treec4380735508587e667ca632bab9ebc072c84a367 /mysql-test/t/truncate.test
parent2eaf8ac837c2c4002fe359c12ddc2df8f2a79899 (diff)
downloadmariadb-git-0b54001b21e56ceb04d80eeeadbb62a04b04d34f.tar.gz
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.
Diffstat (limited to 'mysql-test/t/truncate.test')
-rw-r--r--mysql-test/t/truncate.test32
1 files changed, 32 insertions, 0 deletions
diff --git a/mysql-test/t/truncate.test b/mysql-test/t/truncate.test
index f806bd8ec17..c52260124cb 100644
--- a/mysql-test/t/truncate.test
+++ b/mysql-test/t/truncate.test
@@ -52,3 +52,35 @@ 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