Skip to content

Commit c2c45c5

Browse files
author
Alexander Barkov
committed
MDEV-10709 Expressions as parameters to Dynamic SQL
Adding Oracle specific tests
1 parent c8822d7 commit c2c45c5

File tree

2 files changed

+189
-0
lines changed

2 files changed

+189
-0
lines changed

mysql-test/suite/compat/oracle/r/ps.result

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,94 @@ PREPARE stmt FROM 'SELECT :65535,:0';
3939
EXECUTE stmt USING @a, @b;
4040
:65535 :0
4141
10 20
42+
#
43+
# MDEV-10709 Expressions as parameters to Dynamic SQL
44+
#
45+
#
46+
# Using a user variable as a EXECUTE..USING out parameter
47+
#
48+
CREATE PROCEDURE p1(a OUT INT)
49+
AS
50+
BEGIN
51+
a:= 10;
52+
END;
53+
/
54+
SET @a=1;
55+
CALL p1(@a);
56+
SELECT @a;
57+
@a
58+
10
59+
SET @a=2;
60+
PREPARE stmt FROM 'CALL p1(?)';
61+
EXECUTE stmt USING @a;
62+
SELECT @a;
63+
@a
64+
10
65+
DROP PROCEDURE p1;
66+
#
67+
# Using an SP variable as a EXECUTE..USING out parameter
68+
#
69+
CREATE PROCEDURE p1 (a OUT INT)
70+
AS
71+
BEGIN
72+
a:=10;
73+
END;
74+
/
75+
CREATE PROCEDURE p2 (a OUT INT)
76+
AS
77+
BEGIN
78+
PREPARE stmt FROM 'CALL p1(?)';
79+
EXECUTE stmt USING a;
80+
END;
81+
/
82+
SET @a= 1;
83+
CALL p2(@a);
84+
SELECT @a;
85+
@a
86+
10
87+
DROP PROCEDURE p2;
88+
DROP PROCEDURE p1;
89+
#
90+
# Using a trigger field as a EXECUTE..USING out parameter
91+
#
92+
CREATE PROCEDURE p1 (a OUT INT)
93+
AS
94+
BEGIN
95+
a:= 10;
96+
END;
97+
/
98+
CREATE TABLE t1 (a INT);
99+
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW CALL p1(:NEW.a);
100+
INSERT INTO t1 VALUES (1);
101+
SELECT * FROM t1;
102+
a
103+
10
104+
DROP TABLE t1;
105+
DROP PROCEDURE p1;
106+
#
107+
# Testing re-prepare on a table metadata update between PREPARE and EXECUTE
108+
#
109+
CREATE TABLE t1 (a INT);
110+
CREATE PROCEDURE p1(a IN INT)
111+
AS
112+
BEGIN
113+
INSERT INTO t1 VALUES (a);
114+
END;
115+
/
116+
PREPARE stmt FROM 'CALL p1(?)';
117+
EXECUTE stmt USING 10;
118+
SELECT * FROM t1;
119+
a
120+
10
121+
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW NEW.a:=NEW.a+1;
122+
EXECUTE stmt USING 20;
123+
SELECT * FROM t1;
124+
a
125+
10
126+
21
127+
DEALLOCATE PREPARE stmt;
128+
DROP PROCEDURE p1;
129+
DROP TABLE t1;
130+
#
131+
# End of MDEV-10709 Expressions as parameters to Dynamic SQL
132+
#

mysql-test/suite/compat/oracle/t/ps.test

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,101 @@ PREPARE stmt FROM 'SELECT :0,:65535';
2323
EXECUTE stmt USING @a, @b;
2424
PREPARE stmt FROM 'SELECT :65535,:0';
2525
EXECUTE stmt USING @a, @b;
26+
27+
--echo #
28+
--echo # MDEV-10709 Expressions as parameters to Dynamic SQL
29+
--echo #
30+
31+
--echo #
32+
--echo # Using a user variable as a EXECUTE..USING out parameter
33+
--echo #
34+
35+
DELIMITER /;
36+
CREATE PROCEDURE p1(a OUT INT)
37+
AS
38+
BEGIN
39+
a:= 10;
40+
END;
41+
/
42+
DELIMITER ;/
43+
SET @a=1;
44+
CALL p1(@a);
45+
SELECT @a;
46+
SET @a=2;
47+
PREPARE stmt FROM 'CALL p1(?)';
48+
EXECUTE stmt USING @a;
49+
SELECT @a;
50+
DROP PROCEDURE p1;
51+
52+
53+
--echo #
54+
--echo # Using an SP variable as a EXECUTE..USING out parameter
55+
--echo #
56+
57+
DELIMITER /;
58+
CREATE PROCEDURE p1 (a OUT INT)
59+
AS
60+
BEGIN
61+
a:=10;
62+
END;
63+
/
64+
CREATE PROCEDURE p2 (a OUT INT)
65+
AS
66+
BEGIN
67+
PREPARE stmt FROM 'CALL p1(?)';
68+
EXECUTE stmt USING a;
69+
END;
70+
/
71+
DELIMITER ;/
72+
SET @a= 1;
73+
CALL p2(@a);
74+
SELECT @a;
75+
DROP PROCEDURE p2;
76+
DROP PROCEDURE p1;
77+
78+
79+
--echo #
80+
--echo # Using a trigger field as a EXECUTE..USING out parameter
81+
--echo #
82+
DELIMITER /;
83+
CREATE PROCEDURE p1 (a OUT INT)
84+
AS
85+
BEGIN
86+
a:= 10;
87+
END;
88+
/
89+
DELIMITER ;/
90+
CREATE TABLE t1 (a INT);
91+
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW CALL p1(:NEW.a);
92+
INSERT INTO t1 VALUES (1);
93+
SELECT * FROM t1;
94+
DROP TABLE t1;
95+
DROP PROCEDURE p1;
96+
97+
98+
--echo #
99+
--echo # Testing re-prepare on a table metadata update between PREPARE and EXECUTE
100+
--echo #
101+
102+
CREATE TABLE t1 (a INT);
103+
DELIMITER /;
104+
CREATE PROCEDURE p1(a IN INT)
105+
AS
106+
BEGIN
107+
INSERT INTO t1 VALUES (a);
108+
END;
109+
/
110+
DELIMITER ;/
111+
PREPARE stmt FROM 'CALL p1(?)';
112+
EXECUTE stmt USING 10;
113+
SELECT * FROM t1;
114+
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW NEW.a:=NEW.a+1;
115+
EXECUTE stmt USING 20;
116+
SELECT * FROM t1;
117+
DEALLOCATE PREPARE stmt;
118+
DROP PROCEDURE p1;
119+
DROP TABLE t1;
120+
121+
--echo #
122+
--echo # End of MDEV-10709 Expressions as parameters to Dynamic SQL
123+
--echo #

0 commit comments

Comments
 (0)