Commit d70bb5e6 authored by Aleksey Midenkov's avatar Aleksey Midenkov

SQL: delete from VIEW [fixes #291]

parent c9520cb0
......@@ -104,14 +104,18 @@ fields, " < '2038-01-19 03:14:07'
and timestamp '2038-01-19 04:14:07'");
prepare stmt from @str; execute stmt;
delete from t1 where XNo = 0;
select "Deleted 0";
execute stmt;
delete from t1 where XNo = 1;
select "Deleted 1";
execute stmt;
delete from t1 where XNo > 5;
select "Deleted >5";
create view vt1 as select XNo from t1;
select XNo from vt1;
select XNo as XNo_vt1 from vt1;
delete from vt1 where XNo = 3;
select XNo from vt1;
select "Deleted from VIEW 3";
select XNo as XNo_vt1 from vt1;
execute stmt; drop prepare stmt;
drop view vt1;
drop table t1;
......@@ -180,6 +184,8 @@ XNo sys_end < '2038-01-19 03:14:07'
7 0
8 0
9 0
Deleted 0
Deleted 0
XNo sys_end < '2038-01-19 03:14:07'
0 1
1 0
......@@ -191,6 +197,8 @@ XNo sys_end < '2038-01-19 03:14:07'
7 0
8 0
9 0
Deleted 1
Deleted 1
XNo sys_end < '2038-01-19 03:14:07'
0 1
1 1
......@@ -202,12 +210,16 @@ XNo sys_end < '2038-01-19 03:14:07'
7 0
8 0
9 0
XNo
Deleted >5
Deleted >5
XNo_vt1
2
3
4
5
XNo
Deleted from VIEW 3
Deleted from VIEW 3
XNo_vt1
2
4
5
......@@ -234,6 +246,8 @@ XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
7 0
8 0
9 0
Deleted 0
Deleted 0
XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
0 1
1 0
......@@ -245,6 +259,8 @@ XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
7 0
8 0
9 0
Deleted 1
Deleted 1
XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
0 1
1 1
......@@ -256,12 +272,16 @@ XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
7 0
8 0
9 0
XNo
Deleted >5
Deleted >5
XNo_vt1
2
3
4
5
XNo
Deleted from VIEW 3
Deleted from VIEW 3
XNo_vt1
2
4
5
......@@ -362,13 +382,14 @@ No A B C D
2 1 1 1 1
3 1 1 1 1
4 1 1 1 1
drop procedure test_01;
drop procedure test_02;
drop procedure test_03;
drop procedure verify_vtq;
drop procedure innodb_verify_vtq;
drop function default_engine;
drop function sys_commit_ts;
drop function sys_datatype;
drop procedure concat_exec2;
drop procedure concat_exec3;
# Update + delete
create or replace table t1 (x int) with system versioning;
insert into t1 values (1);
update t1 set x= 2;
delete from t1;
select x from t1 for system_time all;
x
2
1
drop database test;
create database test;
......@@ -32,14 +32,18 @@ begin
and timestamp '2038-01-19 04:14:07'");
prepare stmt from @str; execute stmt;
delete from t1 where XNo = 0;
select "Deleted 0";
execute stmt;
delete from t1 where XNo = 1;
select "Deleted 1";
execute stmt;
delete from t1 where XNo > 5;
select "Deleted >5";
create view vt1 as select XNo from t1;
select XNo from vt1;
select XNo as XNo_vt1 from vt1;
delete from vt1 where XNo = 3;
select XNo from vt1;
select "Deleted from VIEW 3";
select XNo as XNo_vt1 from vt1;
execute stmt; drop prepare stmt;
drop view vt1;
drop table t1;
......@@ -114,8 +118,12 @@ call test_03('timestamp(6)', 'myisam', 'sys_end');
call test_03('bigint unsigned', 'innodb', 'vtq_commit_ts(sys_end)');
call verify_vtq;
drop procedure test_01;
drop procedure test_02;
drop procedure test_03;
--echo # Update + delete
create or replace table t1 (x int) with system versioning;
insert into t1 values (1);
update t1 set x= 2;
delete from t1;
select x from t1 for system_time all;
-- source suite/versioning/common_finish.inc
drop database test;
create database test;
......@@ -220,7 +220,12 @@ static bool record_should_be_deleted(THD *thd, TABLE *table, SQL_SELECT *sel,
if (table->versioned())
{
bool row_is_alive= table->vers_end_field()->is_max();
if (table->pos_in_table_list->vers_conditions ? row_is_alive : !row_is_alive)
/* If we are doing TRUNCATE TABLE with SYSTEM_TIME condition then historical
record is deleted and current record is kept. Otherwise alive record is
deleted and historical record is kept. */
if ((thd->lex->sql_command == SQLCOM_TRUNCATE && table->pos_in_table_list->vers_conditions)
? row_is_alive
: !row_is_alive)
return false;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment