mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
SQL: delete from VIEW [fixes #291]
This commit is contained in:
@ -104,14 +104,18 @@ fields, " < '2038-01-19 03:14:07'
|
|||||||
and timestamp '2038-01-19 04:14:07'");
|
and timestamp '2038-01-19 04:14:07'");
|
||||||
prepare stmt from @str; execute stmt;
|
prepare stmt from @str; execute stmt;
|
||||||
delete from t1 where XNo = 0;
|
delete from t1 where XNo = 0;
|
||||||
|
select "Deleted 0";
|
||||||
execute stmt;
|
execute stmt;
|
||||||
delete from t1 where XNo = 1;
|
delete from t1 where XNo = 1;
|
||||||
|
select "Deleted 1";
|
||||||
execute stmt;
|
execute stmt;
|
||||||
delete from t1 where XNo > 5;
|
delete from t1 where XNo > 5;
|
||||||
|
select "Deleted >5";
|
||||||
create view vt1 as select XNo from t1;
|
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;
|
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;
|
execute stmt; drop prepare stmt;
|
||||||
drop view vt1;
|
drop view vt1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
@ -180,6 +184,8 @@ XNo sys_end < '2038-01-19 03:14:07'
|
|||||||
7 0
|
7 0
|
||||||
8 0
|
8 0
|
||||||
9 0
|
9 0
|
||||||
|
Deleted 0
|
||||||
|
Deleted 0
|
||||||
XNo sys_end < '2038-01-19 03:14:07'
|
XNo sys_end < '2038-01-19 03:14:07'
|
||||||
0 1
|
0 1
|
||||||
1 0
|
1 0
|
||||||
@ -191,6 +197,8 @@ XNo sys_end < '2038-01-19 03:14:07'
|
|||||||
7 0
|
7 0
|
||||||
8 0
|
8 0
|
||||||
9 0
|
9 0
|
||||||
|
Deleted 1
|
||||||
|
Deleted 1
|
||||||
XNo sys_end < '2038-01-19 03:14:07'
|
XNo sys_end < '2038-01-19 03:14:07'
|
||||||
0 1
|
0 1
|
||||||
1 1
|
1 1
|
||||||
@ -202,12 +210,16 @@ XNo sys_end < '2038-01-19 03:14:07'
|
|||||||
7 0
|
7 0
|
||||||
8 0
|
8 0
|
||||||
9 0
|
9 0
|
||||||
XNo
|
Deleted >5
|
||||||
|
Deleted >5
|
||||||
|
XNo_vt1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
XNo
|
Deleted from VIEW 3
|
||||||
|
Deleted from VIEW 3
|
||||||
|
XNo_vt1
|
||||||
2
|
2
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
@ -234,6 +246,8 @@ XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
|
|||||||
7 0
|
7 0
|
||||||
8 0
|
8 0
|
||||||
9 0
|
9 0
|
||||||
|
Deleted 0
|
||||||
|
Deleted 0
|
||||||
XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
|
XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
|
||||||
0 1
|
0 1
|
||||||
1 0
|
1 0
|
||||||
@ -245,6 +259,8 @@ XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
|
|||||||
7 0
|
7 0
|
||||||
8 0
|
8 0
|
||||||
9 0
|
9 0
|
||||||
|
Deleted 1
|
||||||
|
Deleted 1
|
||||||
XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
|
XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
|
||||||
0 1
|
0 1
|
||||||
1 1
|
1 1
|
||||||
@ -256,12 +272,16 @@ XNo vtq_commit_ts(sys_end) < '2038-01-19 03:14:07'
|
|||||||
7 0
|
7 0
|
||||||
8 0
|
8 0
|
||||||
9 0
|
9 0
|
||||||
XNo
|
Deleted >5
|
||||||
|
Deleted >5
|
||||||
|
XNo_vt1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
XNo
|
Deleted from VIEW 3
|
||||||
|
Deleted from VIEW 3
|
||||||
|
XNo_vt1
|
||||||
2
|
2
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
@ -362,13 +382,14 @@ No A B C D
|
|||||||
2 1 1 1 1
|
2 1 1 1 1
|
||||||
3 1 1 1 1
|
3 1 1 1 1
|
||||||
4 1 1 1 1
|
4 1 1 1 1
|
||||||
drop procedure test_01;
|
# Update + delete
|
||||||
drop procedure test_02;
|
create or replace table t1 (x int) with system versioning;
|
||||||
drop procedure test_03;
|
insert into t1 values (1);
|
||||||
drop procedure verify_vtq;
|
update t1 set x= 2;
|
||||||
drop procedure innodb_verify_vtq;
|
delete from t1;
|
||||||
drop function default_engine;
|
select x from t1 for system_time all;
|
||||||
drop function sys_commit_ts;
|
x
|
||||||
drop function sys_datatype;
|
2
|
||||||
drop procedure concat_exec2;
|
1
|
||||||
drop procedure concat_exec3;
|
drop database test;
|
||||||
|
create database test;
|
||||||
|
@ -32,14 +32,18 @@ begin
|
|||||||
and timestamp '2038-01-19 04:14:07'");
|
and timestamp '2038-01-19 04:14:07'");
|
||||||
prepare stmt from @str; execute stmt;
|
prepare stmt from @str; execute stmt;
|
||||||
delete from t1 where XNo = 0;
|
delete from t1 where XNo = 0;
|
||||||
|
select "Deleted 0";
|
||||||
execute stmt;
|
execute stmt;
|
||||||
delete from t1 where XNo = 1;
|
delete from t1 where XNo = 1;
|
||||||
|
select "Deleted 1";
|
||||||
execute stmt;
|
execute stmt;
|
||||||
delete from t1 where XNo > 5;
|
delete from t1 where XNo > 5;
|
||||||
|
select "Deleted >5";
|
||||||
create view vt1 as select XNo from t1;
|
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;
|
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;
|
execute stmt; drop prepare stmt;
|
||||||
drop view vt1;
|
drop view vt1;
|
||||||
drop table t1;
|
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 test_03('bigint unsigned', 'innodb', 'vtq_commit_ts(sys_end)');
|
||||||
call verify_vtq;
|
call verify_vtq;
|
||||||
|
|
||||||
drop procedure test_01;
|
--echo # Update + delete
|
||||||
drop procedure test_02;
|
create or replace table t1 (x int) with system versioning;
|
||||||
drop procedure test_03;
|
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())
|
if (table->versioned())
|
||||||
{
|
{
|
||||||
bool row_is_alive= table->vers_end_field()->is_max();
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user