Skip to content

Commit

Permalink
DB-504 test replace select triggers for bulk fetch
Browse files Browse the repository at this point in the history
  • Loading branch information
prohaska committed Aug 19, 2014
1 parent bdef225 commit e502d3e
Show file tree
Hide file tree
Showing 2 changed files with 290 additions and 0 deletions.
121 changes: 121 additions & 0 deletions mysql-test/suite/tokudb/r/bf_replace_select_trigger.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
set default_storage_engine='tokudb';
drop table if exists s,t;
create table s (id bigint not null primary key, x bigint);
insert into s values (1,0),(2,0),(3,0),(4,0);
create table t like s;
begin;
replace into t select * from s;
rollback;
create trigger t_trigger before insert on t for each row replace into s values (1000000,0);
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after insert on t for each row replace into s values (1000000,0);
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger before insert on t for each row delete from s where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after insert on t for each row delete from s where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger before insert on t for each row update s set x=x+1 where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after insert on t for each row update s set x=x+1 where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
truncate table t;
insert into t values (1,1);
create trigger t_trigger before insert on t for each row replace into s values (1000000,0);
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after insert on t for each row replace into s values (1000000,0);
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger before insert on t for each row delete from s where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after insert on t for each row delete from s where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger before insert on t for each row update s set x=x+1 where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after insert on t for each row update s set x=x+1 where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
truncate table t;
insert into t values (1,1);
create trigger t_trigger before delete on t for each row replace into s values (1000000,0);
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after delete on t for each row replace into s values (1000000,0);
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger before delete on t for each row delete from s where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after delete on t for each row delete from s where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger before delete on t for each row update s set x=x+1 where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
create trigger t_trigger after delete on t for each row update s set x=x+1 where id=1000000;
begin;
replace into t select * from s;
ERROR HY000: Can't update table 's' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
rollback;
drop trigger t_trigger;
drop table s,t;
169 changes: 169 additions & 0 deletions mysql-test/suite/tokudb/t/bf_replace_select_trigger.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# verify that various insert and update triggers can not execute on the source table
# for a replace select statement

source include/have_tokudb.inc;
set default_storage_engine='tokudb';
disable_warnings;
drop table if exists s,t;
enable_warnings;

create table s (id bigint not null primary key, x bigint);
insert into s values (1,0),(2,0),(3,0),(4,0);

create table t like s;
begin;
replace into t select * from s;
rollback;

# verify that before insert triggers can not replace into the source table
create trigger t_trigger before insert on t for each row replace into s values (1000000,0);
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after insert triggers can not replace into the source table
create trigger t_trigger after insert on t for each row replace into s values (1000000,0);
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that before insert triggers can not delete from the source table
create trigger t_trigger before insert on t for each row delete from s where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after insert triggers can not delete from the source table
create trigger t_trigger after insert on t for each row delete from s where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that before insert triggers can not update the source table
create trigger t_trigger before insert on t for each row update s set x=x+1 where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after insert triggers can not update the source table
create trigger t_trigger after insert on t for each row update s set x=x+1 where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

truncate table t;
insert into t values (1,1);

# verify that before insert triggers can not replace into the source table
create trigger t_trigger before insert on t for each row replace into s values (1000000,0);
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after insert triggers can not replace into the source table
create trigger t_trigger after insert on t for each row replace into s values (1000000,0);
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that before insert triggers can not delete from the source table
create trigger t_trigger before insert on t for each row delete from s where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after insert triggers can not delete from the source table
create trigger t_trigger after insert on t for each row delete from s where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that before insert triggers can not update the source table
create trigger t_trigger before insert on t for each row update s set x=x+1 where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after insert triggers can not update the source table
create trigger t_trigger after insert on t for each row update s set x=x+1 where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

truncate table t;
insert into t values (1,1);

# verify that before delete triggers can not replace into the source table
create trigger t_trigger before delete on t for each row replace into s values (1000000,0);
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after delete triggers can not replace into the source table
create trigger t_trigger after delete on t for each row replace into s values (1000000,0);
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that before delete triggers can not delete from the source table
create trigger t_trigger before delete on t for each row delete from s where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after delete triggers can not delete from the source table
create trigger t_trigger after delete on t for each row delete from s where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that before delete triggers can not update the source table
create trigger t_trigger before delete on t for each row update s set x=x+1 where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;

# verify that after delete triggers can not update the source table
create trigger t_trigger after delete on t for each row update s set x=x+1 where id=1000000;
begin;
error 1442;
replace into t select * from s;
rollback;
drop trigger t_trigger;


drop table s,t;

0 comments on commit e502d3e

Please sign in to comment.