mariadb/mysql-test/suite/perfschema/include/program_setup.inc
2020-03-10 19:24:23 +01:00

136 lines
2.9 KiB
SQL

#
# SET-UP - Creation of various non-nested stored programs
#
--source include/no_protocol.inc
--source include/have_innodb.inc
--echo # SET-UP
CREATE DATABASE stored_programs;
USE stored_programs;
CREATE TABLE t1(
i INT NOT NULL,
j INT
) engine=innodb;
CREATE TABLE t2(
name CHAR(16) NOT NULL DEFAULT '',
id INT NOT NULL
) engine=innodb;
CREATE TABLE t3(
d DATE,
n INT,
f DOUBLE,
s VARCHAR(32)
);
CREATE TABLE t4(
`k` int(10) unsigned NOT NULL AUTO_INCREMENT,
`word` varchar(100) NOT NULL,
`mean` varchar(300) NOT NULL,
PRIMARY KEY (`k`)
);
--echo ############################
--echo # Creating Stored Programs #
--echo ############################
--echo # Stored Routine ( Procedure & Function )
DELIMITER |;
CREATE PROCEDURE SampleProc1(x1 INT, x2 INT, y INT)
BEGIN
INSERT INTO t1 VALUES (x1, y);
INSERT INTO t1 VALUES (x2, y);
END|
CREATE PROCEDURE SampleProc2(x CHAR(16), y INT)
BEGIN
DECLARE z1, z2 INT;
SET z1 = y;
SET z2 = z1+2;
INSERT INTO t2 VALUES (x, z2);
END|
CREATE PROCEDURE SampleProc3()
BEGIN
DECLARE ld DATE;
DECLARE li INT;
DECLARE lf DOUBLE;
DECLARE ls VARCHAR(32);
SET ld = NULL, li = NULL, lf = NULL, ls = NULL;
INSERT INTO t3 VALUES (ld, li, lf, ls);
INSERT INTO t3 (n, f, s) VALUES ((ld IS NULL), 1, "ld is null"),
((li IS NULL), 1, "li is null"),
((li = 0), NULL, "li = 0"),
((lf IS NULL), 1, "lf is null"),
((lf = 0), NULL, "lf = 0"),
((ls IS NULL), 1, "ls is null");
END|
CREATE PROCEDURE SampleProc4()
BEGIN
DECLARE x INT;
SET x = 1;
WHILE x <= 2 DO
INSERT INTO t4(word, mean) VALUES('a','a mean');
SET x = x + 1;
END WHILE;
END|
CREATE FUNCTION append(s1 CHAR(8), s2 CHAR(8)) RETURNS CHAR(16)
RETURN concat(s1, s2)|
CREATE FUNCTION wt_avg(n1 INT, n2 INT, n3 INT, n4 INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE avg INT;
SET avg = (n1+n2+n3*2+n4*4)/8;
RETURN avg;
END|
CREATE FUNCTION fac(n INT UNSIGNED) RETURNS BIGINT UNSIGNED
BEGIN
DECLARE f BIGINT UNSIGNED DEFAULT 1;
WHILE n > 1 DO
SET f = f * n;
SET n = n - 1;
END WHILE;
RETURN f;
END|
--echo # Triggers
# INSERT triggers
CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW
BEGIN
if isnull(new.j) then
SET new.j:= new.i * 10;
END if;
END|
CREATE TRIGGER trg2 AFTER INSERT ON t2 FOR EACH ROW
BEGIN
UPDATE t1 SET i=new.id+i ;
END|
# UPDATE trigger
CREATE TRIGGER trg3 AFTER UPDATE ON t2 FOR EACH ROW
SET @change:= @change + new.id - old.id|
# DELETE triggers
CREATE TRIGGER trg4 BEFORE DELETE ON t1 FOR EACH ROW
SET @del:= @del + 1|
CREATE TRIGGER trg5 AFTER DELETE ON t1 FOR EACH ROW
SET @del:= @del + 8 + old.j|
DELIMITER ;|