1--source include/not_embedded.inc 2--source include/have_binlog_format_statement.inc 3 4--disable_query_log 5call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); 6reset master; # get rid of previous tests binlog 7--enable_query_log 8 9 10SET sql_mode=ORACLE; 11 12--echo # 13--echo # MDEV-10914 ROW data type for stored routine variables 14--echo # 15 16CREATE TABLE t1 (a INT, b INT); 17DELIMITER $$; 18CREATE PROCEDURE p1 19AS 20 rec ROW(a INT,b INT); 21BEGIN 22 rec.a:=100; 23 rec.b:=200; 24 INSERT INTO t1 VALUES (rec.a,rec.b); 25 INSERT INTO t1 VALUES (10, rec=ROW(100,200)); 26 INSERT INTO t1 VALUES (10, ROW(100,200)=rec); 27 INSERT INTO t1 SELECT 10, 20 FROM DUAL WHERE rec=ROW(100,200); 28 INSERT INTO t1 SELECT 10, 21 FROM DUAL WHERE ROW(100,200)=rec; 29 rec.a:=NULL; 30 INSERT INTO t1 VALUES (11, rec=ROW(100,200)); 31 INSERT INTO t1 VALUES (11, rec=ROW(100,201)); 32 INSERT INTO t1 VALUES (11, ROW(100,200)=rec); 33 INSERT INTO t1 VALUES (11, ROW(100,201)=rec); 34 INSERT INTO t1 SELECT 11, 20 FROM DUAL WHERE rec=ROW(100,200); 35 INSERT INTO t1 SELECT 11, 21 FROM DUAL WHERE ROW(100,200)=rec; 36 rec.b:=NULL; 37 INSERT INTO t1 VALUES (12, rec=ROW(100,200)); 38 INSERT INTO t1 VALUES (12, ROW(100,200)=rec); 39 INSERT INTO t1 SELECT 12, 20 FROM DUAL WHERE rec=ROW(100,200); 40 INSERT INTO t1 SELECT 12, 21 FROM DUAL WHERE ROW(100,200)=rec; 41END; 42$$ 43DELIMITER ;$$ 44CALL p1(); 45SELECT * FROM t1; 46DROP TABLE t1; 47DROP PROCEDURE p1; 48--let $binlog_file = LAST 49source include/show_binlog_events.inc; 50 51 52--echo # 53--echo # Testing ROW fields in LIMIT 54--echo # 55 56FLUSH LOGS; 57CREATE TABLE t1 (a INT); 58INSERT INTO t1 VALUES (10),(10); 59CREATE TABLE t2 (a INT); 60DELIMITER $$; 61CREATE PROCEDURE p1() 62AS 63 a INT:= 1; 64 rec ROW(a INT); 65BEGIN 66 rec.a:= 1; 67 INSERT INTO t2 SELECT 1 FROM t1 LIMIT a; 68 INSERT INTO t2 SELECT 2 FROM t1 LIMIT rec.a; 69END; 70$$ 71DELIMITER ;$$ 72CALL p1(); 73DROP TABLE t1,t2; 74DROP PROCEDURE p1; 75--let $binlog_file = LAST 76source include/show_binlog_events.inc; 77 78 79--echo # 80--echo # End of MDEV-10914 ROW data type for stored routine variables 81--echo # 82 83 84--echo # 85--echo # MDEV-12291 Allow ROW variables as SELECT INTO targets 86--echo # 87 88FLUSH LOGS; 89SET sql_mode=DEFAULT; 90CREATE TABLE t1 (a INT, b VARCHAR(32)); 91INSERT INTO t1 VALUES (10, 'b10'); 92CREATE TABLE t2 LIKE t1; 93DELIMITER $$; 94CREATE PROCEDURE p1() 95BEGIN 96 DECLARE rec1 ROW(a INT, b VARCHAR(32)); 97 SELECT * INTO rec1 FROM t1; 98 INSERT INTO t2 VALUES (rec1.a, rec1.b); 99END; 100$$ 101DELIMITER ;$$ 102CALL p1(); 103SELECT * FROM t1; 104DROP TABLE t1; 105DROP TABLE t2; 106DROP PROCEDURE p1; 107--let $binlog_file = LAST 108source include/show_binlog_events.inc; 109