@@ -64,6 +64,10 @@ PREPARE my_plan AS SELECT $1;
6464statement error Prepared statement \'my_plan\' does not exist
6565EXECUTE my_plan('Foo', 'Bar');
6666
67+ # deallocate a non-existing plan
68+ statement error Prepared statement \'my_plan\' does not exist
69+ DEALLOCATE my_plan;
70+
6771statement ok
6872PREPARE my_plan(STRING, STRING) AS SELECT * FROM (VALUES(1, $1), (2, $2)) AS t (num, letter);
6973
@@ -77,6 +81,28 @@ EXECUTE my_plan('Foo', 'Bar');
7781statement error Prepared statement \'my_plan\' already exists
7882PREPARE my_plan(STRING, STRING) AS SELECT * FROM (VALUES(1, $1), (2, $2)) AS t (num, letter);
7983
84+ # deallocate a plan
85+ statement ok
86+ DEALLOCATE my_plan;
87+
88+ # can't EXECUTE a deallocated plan
89+ statement error Prepared statement \'my_plan\' does not exist
90+ EXECUTE my_plan('Foo', 'Bar');
91+
92+ # re-prepare a deallocated plan
93+ statement ok
94+ PREPARE my_plan(STRING, STRING) AS SELECT * FROM (VALUES(1, $1), (2, $2)) AS t (num, letter);
95+
96+ query IT
97+ EXECUTE my_plan('Foo', 'Bar');
98+ ----
99+ 1 Foo
100+ 2 Bar
101+
102+ # deallocate with the PREPARE keyword
103+ statement ok
104+ DEALLOCATE PREPARE my_plan;
105+
80106statement error Prepare specifies 1 data types but query has 0 parameters
81107PREPARE my_plan(INT) AS SELECT id, age FROM person WHERE age = 10;
82108
@@ -89,6 +115,9 @@ EXECUTE my_plan2;
89115----
901161 20
91117
118+ statement ok
119+ DEALLOCATE my_plan2;
120+
92121statement ok
93122PREPARE my_plan3(INT) AS SELECT $1;
94123
@@ -97,6 +126,9 @@ EXECUTE my_plan3(10);
97126----
9812710
99128
129+ statement ok
130+ DEALLOCATE my_plan3;
131+
100132statement ok
101133PREPARE my_plan4(INT) AS SELECT 1 + $1;
102134
@@ -105,6 +137,9 @@ EXECUTE my_plan4(10);
105137----
10613811
107139
140+ statement ok
141+ DEALLOCATE my_plan4;
142+
108143statement ok
109144PREPARE my_plan5(INT, DOUBLE) AS SELECT 1 + $1 + $2;
110145
@@ -113,6 +148,9 @@ EXECUTE my_plan5(10, 20.5);
113148----
11414931.5
115150
151+ statement ok
152+ DEALLOCATE my_plan5;
153+
116154statement ok
117155PREPARE my_plan6(INT) AS SELECT id, age FROM person WHERE age = $1;
118156
@@ -140,6 +178,9 @@ EXECUTE my_plan6('foo');
140178statement error Unsupported parameter type
141179EXECUTE my_plan6(10 + 20);
142180
181+ statement ok
182+ DEALLOCATE my_plan6;
183+
143184statement ok
144185PREPARE my_plan7(INT, STRING, DOUBLE, INT, DOUBLE, STRING)
145186 AS
@@ -150,6 +191,9 @@ EXECUTE my_plan7(10, 'jane', 99999.45, 20, 200000.45, 'foo');
150191----
1511921 20 foo
152193
194+ statement ok
195+ DEALLOCATE my_plan7;
196+
153197statement ok
154198PREPARE my_plan8(INT, DOUBLE, DOUBLE, DOUBLE)
155199 AS
@@ -161,6 +205,9 @@ EXECUTE my_plan8(100000, 99999.45, 100000.45, 200000.45);
161205----
1622061 20
163207
208+ statement ok
209+ DEALLOCATE my_plan8;
210+
164211statement ok
165212PREPARE my_plan9(STRING, STRING) AS SELECT * FROM (VALUES(1, $1), (2, $2)) AS t (num, letter);
166213
@@ -170,6 +217,8 @@ EXECUTE my_plan9('Foo', 'Bar');
1702171 Foo
1712182 Bar
172219
220+ statement ok
221+ DEALLOCATE my_plan9;
173222
174223# Test issue: https://github.com/apache/datafusion/issues/12294
175224# prepare argument is in the LIMIT clause
@@ -196,6 +245,9 @@ EXECUTE get_N_rand_ints_from_last_run(2);
1962451
1972461
198247
248+ statement ok
249+ DEALLOCATE get_N_rand_ints_from_last_run;
250+
199251statement ok
200252DROP TABLE test;
201253
0 commit comments