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