mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 45bc7574fb
			
		
	
	
	45bc7574fb
	
	
	
		
			
			Remove usage of deprecated variable storage_engine. It was deprecated in 5.5 but it never issued a deprecation warning. Make it issue a warning in 10.5.1. Replaced with default_storage_engine.
		
			
				
	
	
		
			316 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			316 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| SET @@session.default_storage_engine = 'MyISAM';
 | |
| create table t1 (a int, 
 | |
| b int as (a/10),
 | |
| c int as (a/10) persistent);
 | |
| create table t2 (a timestamp);
 | |
| create trigger trg1 before insert on t1 for each row
 | |
| begin
 | |
| if (new.b < 10) then
 | |
| set new.a:= 100;
 | |
| set new.b:= 9;
 | |
| set new.c:= 9;
 | |
| end if;
 | |
| if (new.c > 50) then
 | |
| set new.a:= 500; 
 | |
| end if;
 | |
| end|
 | |
| create trigger trg2 after insert on t1 for each row
 | |
| begin
 | |
| if (new.b >= 60) then
 | |
| insert into t2 values (now()); 
 | |
| end if;
 | |
| end|
 | |
| create function f1()
 | |
| returns int
 | |
| begin
 | |
| declare sum1 int default '0';
 | |
| declare cur1 cursor for select sum(b) from t1;
 | |
| open cur1;
 | |
| fetch cur1 into sum1;
 | |
| close cur1;
 | |
| return sum1;
 | |
| end|
 | |
| set sql_warnings = 1;
 | |
| insert into t1 (a) values (200);
 | |
| select * from t1;
 | |
| a	b	c
 | |
| 200	20	20
 | |
| select * from t2;
 | |
| a
 | |
| insert into t1 (a) values (10);
 | |
| select * from t1;
 | |
| a	b	c
 | |
| 200	20	20
 | |
| 100	10	10
 | |
| select * from t2;
 | |
| a
 | |
| insert into t1 (a) values (600);
 | |
| select * from t1;
 | |
| a	b	c
 | |
| 200	20	20
 | |
| 100	10	10
 | |
| 500	50	50
 | |
| select * from t2;
 | |
| a
 | |
| select f1();
 | |
| f1()
 | |
| 80
 | |
| set sql_warnings = 0;
 | |
| drop trigger trg1;
 | |
| drop trigger trg2;
 | |
| drop table t2;
 | |
| create procedure p1()
 | |
| begin
 | |
| declare i int default '0';
 | |
| create table t2 like t1;
 | |
| insert into t2 (a) values (100), (200);
 | |
| begin
 | |
| declare cur1 cursor for select sum(c) from t2;
 | |
| open cur1;
 | |
| fetch cur1 into i;
 | |
| close cur1;
 | |
| if (i=30) then
 | |
| insert into t1 values (300,default,default);
 | |
| end if;
 | |
| end;
 | |
| end|
 | |
| delete from t1;
 | |
| call p1();
 | |
| select * from t2;
 | |
| a	b	c
 | |
| 100	10	10
 | |
| 200	20	20
 | |
| select * from t1;
 | |
| a	b	c
 | |
| 300	30	30
 | |
| drop table t1,t2;
 | |
| drop procedure p1;
 | |
| #
 | |
| # MDEV-3845 values of virtual columns are not computed for triggers
 | |
| #
 | |
| CREATE TABLE t1 (
 | |
| a INTEGER UNSIGNED NULL DEFAULT NULL,
 | |
| b INTEGER UNSIGNED GENERATED ALWAYS AS (a) VIRTUAL
 | |
| );
 | |
| CREATE TABLE t2 (c INTEGER UNSIGNED NOT NULL);
 | |
| CREATE TRIGGER t1_ins_aft
 | |
| AFTER INSERT
 | |
| ON t1
 | |
| FOR EACH ROW
 | |
| BEGIN
 | |
| INSERT INTO t2 (c) VALUES (NEW.b);
 | |
| END |
 | |
| CREATE TRIGGER t1_del_bef
 | |
| BEFORE DELETE
 | |
| ON t1
 | |
| FOR EACH ROW
 | |
| BEGIN
 | |
| INSERT INTO t2 (c) VALUES (OLD.b);
 | |
| END |
 | |
| INSERT INTO t1 (a) VALUES (1), (2), (3);
 | |
| SELECT * FROM t2;
 | |
| c
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| DELETE FROM t1;
 | |
| SELECT * FROM t2;
 | |
| c
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| DROP TRIGGER t1_ins_aft;
 | |
| DROP TRIGGER t1_del_bef;
 | |
| DROP TABLE t1,t2;
 | |
| create table t1 (i int, t time not null, vt time(4) as (t) virtual);
 | |
| create trigger trg before update on t1 for each row set @a = 1;
 | |
| insert ignore into t1 (i) values (1);
 | |
| Warnings:
 | |
| Warning	1364	Field 't' doesn't have a default value
 | |
| drop table t1;
 | |
| #
 | |
| # Examine the number of times triggers are recalculated for updates
 | |
| #
 | |
| SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
 | |
| CREATE TABLE t1 (
 | |
| a INTEGER UNSIGNED NULL DEFAULT NULL,
 | |
| b CHAR(10) NULL DEFAULT NULL,
 | |
| c blob NULL DEFAULT NULL,
 | |
| blob_a blob GENERATED ALWAYS AS (last_value(@a:=@a+1,a)) VIRTUAL,
 | |
| blob_b blob GENERATED ALWAYS AS (last_value(@b:=@b+1,b)) VIRTUAL,
 | |
| blob_c blob GENERATED ALWAYS AS (last_value(@c:=@c+1,c)) VIRTUAL
 | |
| );
 | |
| CREATE TRIGGER t1_ins
 | |
| BEFORE INSERT
 | |
| ON t1
 | |
| FOR EACH ROW
 | |
| BEGIN
 | |
| IF NEW.b IS NULL THEN
 | |
| SET NEW.b="generated before insert";
 | |
| END IF;
 | |
| END |
 | |
| CREATE TRIGGER t1_update
 | |
| BEFORE UPDATE
 | |
| ON t1
 | |
| FOR EACH ROW
 | |
| BEGIN
 | |
| IF NEW.b IS NULL or NEW.c IS NULL THEN
 | |
| SET NEW.b="generated before update";
 | |
| SET NEW.c="generated before update";
 | |
| END IF;
 | |
| END |
 | |
| # Inserts
 | |
| set @a=0,@b=0,@c=0;
 | |
| insert into t1 (a) values(1);
 | |
| insert into t1 (a,b) values(2, "*2*");
 | |
| insert into t1 (a,b,c) values(3, "*3*", "**3**");
 | |
| insert into t1 (a,c) values(4, "**4**");
 | |
| select * from t1;
 | |
| a	b	c	blob_a	blob_b	blob_c
 | |
| 1	generated	NULL	1	generated	NULL
 | |
| 2	*2*	NULL	2	*2*	NULL
 | |
| 3	*3*	**3**	3	*3*	**3**
 | |
| 4	generated	**4**	4	generated	**4**
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 4	4	4
 | |
| select * from t1;
 | |
| a	b	c	blob_a	blob_b	blob_c
 | |
| 1	generated	NULL	1	generated	NULL
 | |
| 2	*2*	NULL	2	*2*	NULL
 | |
| 3	*3*	**3**	3	*3*	**3**
 | |
| 4	generated	**4**	4	generated	**4**
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 8	8	8
 | |
| select a,b,c from t1;
 | |
| a	b	c
 | |
| 1	generated	NULL
 | |
| 2	*2*	NULL
 | |
| 3	*3*	**3**
 | |
| 4	generated	**4**
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 8	8	8
 | |
| select a,b,c,blob_a from t1;
 | |
| a	b	c	blob_a
 | |
| 1	generated	NULL	1
 | |
| 2	*2*	NULL	2
 | |
| 3	*3*	**3**	3
 | |
| 4	generated	**4**	4
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 12	8	8
 | |
| # updates
 | |
| set @a=0,@b=0,@c=0;
 | |
| update t1 set a=a+100 where a=1;
 | |
| update t1 set a=a+100, b="*102*" where a=2;
 | |
| update t1 set a=a+100, b=NULL where a=3;
 | |
| update t1 set a=a+100, b="invisible", c=NULL where a=4;
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 0	0	0
 | |
| select * from t1;
 | |
| a	b	c	blob_a	blob_b	blob_c
 | |
| 101	generated	generated before update	101	generated	generated before update
 | |
| 102	generated	generated before update	102	generated	generated before update
 | |
| 103	generated	generated before update	103	generated	generated before update
 | |
| 104	generated	generated before update	104	generated	generated before update
 | |
| drop trigger t1_ins;
 | |
| drop trigger t1_update;
 | |
| drop table t1;
 | |
| SET sql_mode = DEFAULT;
 | |
| #
 | |
| # Same test, but with virtual keys
 | |
| #
 | |
| SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
 | |
| CREATE TABLE t1 (
 | |
| a INTEGER UNSIGNED NULL DEFAULT NULL,
 | |
| b CHAR(10) NULL DEFAULT NULL,
 | |
| c blob NULL DEFAULT NULL,
 | |
| blob_a blob GENERATED ALWAYS AS (a) VIRTUAL,
 | |
| blob_b blob GENERATED ALWAYS AS (RTRIM(b)) VIRTUAL,
 | |
| blob_c blob GENERATED ALWAYS AS (c) VIRTUAL,
 | |
| key (a),
 | |
| key (blob_a(10)),
 | |
| key (blob_b(10)),
 | |
| key (blob_c(10))
 | |
| );
 | |
| CREATE TRIGGER t1_ins
 | |
| BEFORE INSERT
 | |
| ON t1
 | |
| FOR EACH ROW
 | |
| BEGIN
 | |
| IF NEW.b IS NULL THEN
 | |
| SET NEW.b="generated before insert";
 | |
| END IF;
 | |
| END |
 | |
| CREATE TRIGGER t1_update
 | |
| BEFORE UPDATE
 | |
| ON t1
 | |
| FOR EACH ROW
 | |
| BEGIN
 | |
| IF NEW.b IS NULL or NEW.c IS NULL THEN
 | |
| SET NEW.b="generated before update";
 | |
| SET NEW.c="generated before update";
 | |
| END IF;
 | |
| END |
 | |
| # Inserts
 | |
| insert into t1 (a) values(1);
 | |
| insert into t1 (a,b) values(2, "*2*");
 | |
| insert into t1 (a,b,c) values(3, "*3*", "**3**");
 | |
| insert into t1 (a,c) values(4, "**4**");
 | |
| select * from t1;
 | |
| a	b	c	blob_a	blob_b	blob_c
 | |
| 1	generated	NULL	1	generated	NULL
 | |
| 2	*2*	NULL	2	*2*	NULL
 | |
| 3	*3*	**3**	3	*3*	**3**
 | |
| 4	generated	**4**	4	generated	**4**
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 4	4	4
 | |
| select * from t1;
 | |
| a	b	c	blob_a	blob_b	blob_c
 | |
| 1	generated	NULL	1	generated	NULL
 | |
| 2	*2*	NULL	2	*2*	NULL
 | |
| 3	*3*	**3**	3	*3*	**3**
 | |
| 4	generated	**4**	4	generated	**4**
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 4	4	4
 | |
| select a,b,c from t1;
 | |
| a	b	c
 | |
| 1	generated	NULL
 | |
| 2	*2*	NULL
 | |
| 3	*3*	**3**
 | |
| 4	generated	**4**
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 4	4	4
 | |
| select a,b,c,blob_a from t1;
 | |
| a	b	c	blob_a
 | |
| 1	generated	NULL	1
 | |
| 2	*2*	NULL	2
 | |
| 3	*3*	**3**	3
 | |
| 4	generated	**4**	4
 | |
| select @a,@b,@c;
 | |
| @a	@b	@c
 | |
| 4	4	4
 | |
| # updates
 | |
| update t1 set a=a+100 where a=1;
 | |
| update t1 set a=a+100, b="*102*" where a=2;
 | |
| update t1 set a=a+100, b=NULL where a=3;
 | |
| update t1 set a=a+100, b="invisible", c=NULL where a=4;
 | |
| select * from t1;
 | |
| a	b	c	blob_a	blob_b	blob_c
 | |
| 101	generated	generated before update	101	generated	generated before update
 | |
| 102	generated	generated before update	102	generated	generated before update
 | |
| 103	generated	generated before update	103	generated	generated before update
 | |
| 104	generated	generated before update	104	generated	generated before update
 | |
| drop trigger t1_ins;
 | |
| drop trigger t1_update;
 | |
| drop table t1;
 | |
| SET sql_mode = DEFAULT;
 |