mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			407 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			407 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| SET @NO_REFRESH = IF( '' = '', 0, 1);
 | |
| USE test;
 | |
| drop table if exists tb3 ;
 | |
| create table tb3 (
 | |
| f118 char not null DEFAULT 'a', 
 | |
| f119 char binary not null DEFAULT b'101', 
 | |
| f120 char ascii not null DEFAULT b'101', 
 | |
| f121 tinytext, 
 | |
| f122 text, 
 | |
| f123 mediumtext, 
 | |
| f124 longtext unicode, 
 | |
| f125 tinyblob, 
 | |
| f126 blob, 
 | |
| f127 mediumblob, 
 | |
| f128 longblob, 
 | |
| f129 binary not null DEFAULT b'101', 
 | |
| f130 tinyint not null DEFAULT 99, 
 | |
| f131 tinyint unsigned not null DEFAULT 99, 
 | |
| f132 tinyint zerofill not null DEFAULT 99, 
 | |
| f133 tinyint unsigned zerofill not null DEFAULT 99, 
 | |
| f134 smallint not null DEFAULT 999, 
 | |
| f135 smallint unsigned not null DEFAULT 999, 
 | |
| f136 smallint zerofill not null DEFAULT 999,  
 | |
| f137 smallint unsigned zerofill not null DEFAULT 999, 
 | |
| f138 mediumint not null DEFAULT 9999, 
 | |
| f139 mediumint unsigned not null DEFAULT 9999, 
 | |
| f140 mediumint zerofill not null DEFAULT 9999, 
 | |
| f141 mediumint unsigned zerofill not null DEFAULT 9999, 
 | |
| f142 int not null DEFAULT 99999, 
 | |
| f143 int unsigned not null DEFAULT 99999, 
 | |
| f144 int zerofill not null DEFAULT 99999, 
 | |
| f145 int unsigned zerofill not null DEFAULT 99999, 
 | |
| f146 bigint not null DEFAULT 999999, 
 | |
| f147 bigint unsigned not null DEFAULT 999999, 
 | |
| f148 bigint zerofill not null DEFAULT 999999, 
 | |
| f149 bigint unsigned zerofill not null DEFAULT 999999, 
 | |
| f150 decimal not null DEFAULT 999.999, 
 | |
| f151 decimal unsigned not null DEFAULT 999.17, 
 | |
| f152 decimal zerofill not null DEFAULT 999.999, 
 | |
| f153 decimal unsigned zerofill, 
 | |
| f154 decimal (0), 
 | |
| f155 decimal (64), 
 | |
| f156 decimal (0) unsigned, 
 | |
| f157 decimal (64) unsigned, 
 | |
| f158 decimal (0) zerofill, 
 | |
| f159 decimal (64) zerofill, 
 | |
| f160 decimal (0) unsigned zerofill, 
 | |
| f161 decimal (64) unsigned zerofill, 
 | |
| f162 decimal (0,0), 
 | |
| f163 decimal (63,30), 
 | |
| f164 decimal (0,0) unsigned, 
 | |
| f165 decimal (63,30) unsigned, 
 | |
| f166 decimal (0,0) zerofill, 
 | |
| f167 decimal (63,30) zerofill, 
 | |
| f168 decimal (0,0) unsigned zerofill, 
 | |
| f169 decimal (63,30) unsigned zerofill, 
 | |
| f170 numeric, 
 | |
| f171 numeric unsigned, 
 | |
| f172 numeric zerofill, 
 | |
| f173 numeric unsigned zerofill, 
 | |
| f174 numeric (0), 
 | |
| f175 numeric (64) 
 | |
| ) Engine = myisam;
 | |
| Warnings:
 | |
| Note	1265	Data truncated for column 'f150' at row 1
 | |
| Note	1265	Data truncated for column 'f151' at row 1
 | |
| Note	1265	Data truncated for column 'f152' at row 1
 | |
| load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/myisam_tb3.txt' into table tb3 ;
 | |
| 
 | |
| Testcase 3.5.10.1/2/3:
 | |
| ----------------------
 | |
| Create view vw11 as select * from tb3
 | |
| where f122 like 'Test 3.5.10.1/2/3%';
 | |
| Create trigger trg1a before insert on tb3
 | |
| for each row set new.f163=111.11;
 | |
| Create trigger trg1b after insert on tb3
 | |
| for each row set @test_var='After Insert';
 | |
| Create trigger trg1c before update on tb3
 | |
| for each row set new.f121='Y', new.f122='Test 3.5.10.1/2/3-Update';
 | |
| Create trigger trg1d after update on tb3
 | |
| for each row set @test_var='After Update';
 | |
| Create trigger trg1e before delete on tb3
 | |
| for each row set @test_var=5;
 | |
| Create trigger trg1f after delete on tb3
 | |
| for each row set @test_var= 2* @test_var+7;
 | |
| Insert into vw11 (f122, f151) values ('Test 3.5.10.1/2/3', 1);
 | |
| Insert into vw11 (f122, f151) values ('Test 3.5.10.1/2/3', 2);
 | |
| Insert into vw11 (f122, f151) values ('Not in View', 3);
 | |
| select f121, f122, f151, f163
 | |
| from tb3 where f122 like 'Test 3.5.10.1/2/3%' order by f151;
 | |
| f121	f122	f151	f163
 | |
| NULL	Test 3.5.10.1/2/3	1	111.110000000000000000000000000000
 | |
| NULL	Test 3.5.10.1/2/3	2	111.110000000000000000000000000000
 | |
| select f121, f122, f151, f163 from vw11;
 | |
| f121	f122	f151	f163
 | |
| NULL	Test 3.5.10.1/2/3	1	111.110000000000000000000000000000
 | |
| NULL	Test 3.5.10.1/2/3	2	111.110000000000000000000000000000
 | |
| select f121, f122, f151, f163
 | |
| from tb3 where f122 like 'Not in View';
 | |
| f121	f122	f151	f163
 | |
| NULL	Not in View	3	111.110000000000000000000000000000
 | |
| Update vw11 set f163=1;
 | |
| select f121, f122, f151, f163 from tb3
 | |
| where f122 like 'Test 3.5.10.1/2/3%' order by f151;
 | |
| f121	f122	f151	f163
 | |
| Y	Test 3.5.10.1/2/3-Update	1	1.000000000000000000000000000000
 | |
| Y	Test 3.5.10.1/2/3-Update	2	1.000000000000000000000000000000
 | |
| select f121, f122, f151, f163 from vw11;
 | |
| f121	f122	f151	f163
 | |
| Y	Test 3.5.10.1/2/3-Update	1	1.000000000000000000000000000000
 | |
| Y	Test 3.5.10.1/2/3-Update	2	1.000000000000000000000000000000
 | |
| set @test_var=0;
 | |
| Select @test_var as 'before delete';
 | |
| before delete
 | |
| 0
 | |
| delete from vw11 where f151=1;
 | |
| select f121, f122, f151, f163 from tb3
 | |
| where f122 like 'Test 3.5.10.1/2/3%' order by f151;
 | |
| f121	f122	f151	f163
 | |
| Y	Test 3.5.10.1/2/3-Update	2	1.000000000000000000000000000000
 | |
| select f121, f122, f151, f163 from vw11;
 | |
| f121	f122	f151	f163
 | |
| Y	Test 3.5.10.1/2/3-Update	2	1.000000000000000000000000000000
 | |
| Select @test_var as 'after delete';
 | |
| after delete
 | |
| 17
 | |
| drop view vw11;
 | |
| drop trigger trg1a;
 | |
| drop trigger trg1b;
 | |
| drop trigger trg1c;
 | |
| drop trigger trg1d;
 | |
| drop trigger trg1e;
 | |
| drop trigger trg1f;
 | |
| delete from tb3 where f122 like 'Test 3.5.10.1/2/3%';
 | |
| 
 | |
| Testcase 3.5.10.4:
 | |
| ------------------
 | |
| create table tb_load (f1 int, f2 char(25),f3 int) engine=myisam;
 | |
| Create trigger trg4 before insert on tb_load
 | |
| for each row set new.f3=-(new.f1 div 5), @counter= @counter+1;
 | |
| set @counter= 0;
 | |
| select @counter as 'Rows Loaded Before';
 | |
| Rows Loaded Before
 | |
| 0
 | |
| load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/t9.txt' into table tb_load;
 | |
| select @counter as 'Rows Loaded After';
 | |
| Rows Loaded After
 | |
| 10
 | |
| Select * from tb_load order by f1 limit 10;
 | |
| f1	f2	f3
 | |
| -5000	a`	1000
 | |
| -4999	aaa	999
 | |
| -4998	abaa	999
 | |
| -4997	acaaa	999
 | |
| -4996	adaaaa	999
 | |
| -4995	aeaaaaa	999
 | |
| -4994	afaaaaaa	998
 | |
| -4993	agaaaaaaa	998
 | |
| -4992	a^aaaaaaaa	998
 | |
| -4991	a_aaaaaaaaa	998
 | |
| drop trigger trg4;
 | |
| drop table tb_load;
 | |
| 
 | |
| Testcase 3.5.10.5: (implemented in trig_frkey.test)
 | |
| ---------------------------------------------------
 | |
| 
 | |
| Testcase 3.5.10.6: (implemented in trig_frkey.test)
 | |
| ---------------------------------------------------
 | |
| 
 | |
| Testcase 3.5.10.extra:
 | |
| ----------------------
 | |
| create table t1_sp (var136 tinyint, var151 decimal) engine=myisam;
 | |
| create trigger trg before insert on t1_sp
 | |
| for each row set @counter=@counter+1;
 | |
| create procedure trig_sp()
 | |
| begin
 | |
| declare done int default 0;
 | |
| declare var151 decimal;
 | |
| declare var136 tinyint;
 | |
| declare cur1 cursor for select f136, f151 from tb3;
 | |
| declare continue handler for sqlstate '01000' set done = 1;
 | |
| open cur1;
 | |
| fetch cur1 into var136, var151;
 | |
| wl_loop: WHILE NOT done DO
 | |
| insert into t1_sp values (var136, var151);
 | |
| fetch cur1 into var136, var151;
 | |
| END WHILE wl_loop;
 | |
| close cur1;
 | |
| end//
 | |
| set @counter=0;
 | |
| select @counter;
 | |
| @counter
 | |
| 0
 | |
| call trig_sp();
 | |
| ERROR 02000: No data - zero rows fetched, selected, or processed
 | |
| select @counter;
 | |
| @counter
 | |
| 11
 | |
| select count(*) from tb3;
 | |
| count(*)
 | |
| 11
 | |
| select count(*) from t1_sp;
 | |
| count(*)
 | |
| 11
 | |
| drop procedure trig_sp;
 | |
| drop trigger trg;
 | |
| drop table t1_sp;
 | |
| 
 | |
| Testcase 3.5.11.1 (implemented in trig_perf.test)
 | |
| -------------------------------------------------
 | |
| 
 | |
| Testcase y.y.y.2: Check for triggers starting triggers
 | |
| ------------------------------------------------------
 | |
| use test;
 | |
| drop table if exists t1;
 | |
| drop table if exists t2_1;
 | |
| drop table if exists t2_2;
 | |
| drop table if exists t2_3;
 | |
| drop table if exists t2_4;
 | |
| drop table if exists t3;
 | |
| create table t1 (f1 integer) engine=myisam;
 | |
| create table t2_1 (f1 integer) engine=myisam;
 | |
| create table t2_2 (f1 integer) engine=myisam;
 | |
| create table t2_3 (f1 integer) engine=myisam;
 | |
| create table t2_4 (f1 integer) engine=myisam;
 | |
| create table t3 (f1 integer) engine=myisam;
 | |
| insert into t1 values (1);
 | |
| create trigger tr1 after insert on t1 for each row
 | |
| BEGIN
 | |
| insert into t2_1 (f1) values (new.f1+1);
 | |
| insert into t2_2 (f1) values (new.f1+1);
 | |
| insert into t2_3 (f1) values (new.f1+1);
 | |
| insert into t2_4 (f1) values (new.f1+1);
 | |
| END//
 | |
| create trigger tr2_1 after insert on t2_1 for each row
 | |
| insert into t3 (f1) values (new.f1+10);
 | |
| create trigger tr2_2 after insert on t2_2 for each row
 | |
| insert into t3 (f1) values (new.f1+100);
 | |
| create trigger tr2_3 after insert on t2_3 for each row
 | |
| insert into t3 (f1) values (new.f1+1000);
 | |
| create trigger tr2_4 after insert on t2_4 for each row
 | |
| insert into t3 (f1) values (new.f1+10000);
 | |
| insert into t1 values (1);
 | |
| select * from t3 order by f1;
 | |
| f1
 | |
| 12
 | |
| 102
 | |
| 1002
 | |
| 10002
 | |
| drop trigger tr1;
 | |
| drop trigger tr2_1;
 | |
| drop trigger tr2_2;
 | |
| drop trigger tr2_3;
 | |
| drop trigger tr2_4;
 | |
| drop table t1, t2_1, t2_2, t2_3, t2_4, t3;
 | |
| 
 | |
| Testcase y.y.y.3: Circular trigger reference
 | |
| --------------------------------------------
 | |
| use test;
 | |
| drop table if exists t1;
 | |
| drop table if exists t2;
 | |
| drop table if exists t3;
 | |
| drop table if exists t4;
 | |
| create table t1 (f1 integer) engine = myisam;
 | |
| create table t2 (f2 integer) engine = myisam;
 | |
| create table t3 (f3 integer) engine = myisam;
 | |
| create table t4 (f4 integer) engine = myisam;
 | |
| insert into t1 values (0);
 | |
| create trigger tr1 after insert on t1
 | |
| for each row insert into t2 (f2) values (new.f1+1);
 | |
| create trigger tr2 after insert on t2
 | |
| for each row insert into t3 (f3) values (new.f2+1);
 | |
| create trigger tr3 after insert on t3
 | |
| for each row insert into t4 (f4) values (new.f3+1);
 | |
| create trigger tr4 after insert on t4
 | |
| for each row insert into t1 (f1) values (new.f4+1);
 | |
| insert into t1 values (1);
 | |
| ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 | |
| select * from t1 order by f1;
 | |
| f1
 | |
| 0
 | |
| 1
 | |
| select * from t2 order by f2;
 | |
| f2
 | |
| 2
 | |
| select * from t3 order by f3;
 | |
| f3
 | |
| 3
 | |
| select * from t4 order by f4;
 | |
| f4
 | |
| 4
 | |
| drop trigger tr1;
 | |
| drop trigger tr2;
 | |
| drop trigger tr3;
 | |
| drop trigger tr4;
 | |
| drop table t1;
 | |
| drop table t2;
 | |
| drop table t3;
 | |
| drop table t4;
 | |
| 
 | |
| Testcase y.y.y.4: Recursive trigger/SP references (disabled bug 11889)
 | |
| ----------------------------------------------------------------------
 | |
| set @sql_mode='traditional';
 | |
| create table t1_sp (
 | |
| count integer,
 | |
| var136 tinyint,
 | |
| var151 decimal) engine=myisam;
 | |
| create procedure trig_sp()
 | |
| begin
 | |
| declare done int default 0;
 | |
| declare var151 decimal;
 | |
| declare var136 tinyint;
 | |
| declare cur1 cursor for select f136, f151 from tb3;
 | |
| declare continue handler for sqlstate '01000' set done = 1;
 | |
| set @counter= @counter+1;
 | |
| open cur1;
 | |
| fetch cur1 into var136, var151;
 | |
| wl_loop: WHILE NOT done DO
 | |
| insert into t1_sp values (@counter, var136, var151);
 | |
| fetch cur1 into var136, var151;
 | |
| END WHILE wl_loop;
 | |
| close cur1;
 | |
| end//
 | |
| create trigger trg before insert on t1_sp
 | |
| for each row call trig_sp();
 | |
| set @counter=0;
 | |
| select @counter;
 | |
| @counter
 | |
| 0
 | |
| call trig_sp();
 | |
| ERROR HY000: Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine trig_sp
 | |
| select @counter;
 | |
| @counter
 | |
| 1
 | |
| select count(*) from tb3;
 | |
| count(*)
 | |
| 11
 | |
| select count(*) from t1_sp;
 | |
| count(*)
 | |
| 0
 | |
| set @@max_sp_recursion_depth= 10;
 | |
| set @counter=0;
 | |
| select @counter;
 | |
| @counter
 | |
| 0
 | |
| call trig_sp();
 | |
| ERROR HY000: Can't update table 't1_sp' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 | |
| select @counter;
 | |
| @counter
 | |
| 2
 | |
| select count(*) from tb3;
 | |
| count(*)
 | |
| 11
 | |
| select count(*) from t1_sp;
 | |
| count(*)
 | |
| 0
 | |
| drop procedure trig_sp;
 | |
| drop trigger trg;
 | |
| drop table t1_sp;
 | |
| 
 | |
| Testcase y.y.y.5: Roleback of nested trigger references
 | |
| -------------------------------------------------------
 | |
| set @@sql_mode='traditional';
 | |
| use test;
 | |
| drop table if exists t1;
 | |
| drop table if exists t2;
 | |
| drop table if exists t3;
 | |
| drop table if exists t4;
 | |
| create table t1 (f1 integer) engine = myisam;
 | |
| create table t2 (f2 integer) engine = myisam;
 | |
| create table t3 (f3 integer) engine = myisam;
 | |
| create table t4 (f4 tinyint) engine = myisam;
 | |
| show create table t1;
 | |
| Table	Create Table
 | |
| t1	CREATE TABLE `t1` (
 | |
|   `f1` int(11) DEFAULT NULL
 | |
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | |
| insert into t1 values (1);
 | |
| create trigger tr1 after insert on t1
 | |
| for each row insert into t2 (f2) values (new.f1+1);
 | |
| create trigger tr2 after insert on t2
 | |
| for each row insert into t3 (f3) values (new.f2+1);
 | |
| create trigger tr3 after insert on t3
 | |
| for each row insert into t4 (f4) values (new.f3+1000);
 | |
| set autocommit=0;
 | |
| start transaction;
 | |
| insert into t1 values (1);
 | |
| ERROR 22003: Out of range value for column 'f4' at row 1
 | |
| commit;
 | |
| select * from t1 order by f1;
 | |
| f1
 | |
| 1
 | |
| 1
 | |
| select * from t2 order by f2;
 | |
| f2
 | |
| 2
 | |
| select * from t3 order by f3;
 | |
| f3
 | |
| 3
 | |
| drop trigger tr1;
 | |
| drop trigger tr2;
 | |
| drop trigger tr3;
 | |
| drop table t1;
 | |
| drop table t2;
 | |
| drop table t3;
 | |
| drop table t4;
 | 
