@@ -84,6 +84,9 @@ DELIMITER ;$$
8484
8585CALL p1();
8686
87+ # PARAMETER_DEFAULT Column test for various data types
88+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p1';
89+
8790DROP PROCEDURE p1;
8891DROP TABLE t1;
8992DROP DATABASE d1;
@@ -137,6 +140,252 @@ CREATE PROCEDURE sp1(IN p1 INT DEFAULT 0, IN OUT p2 INT)
137140BEGIN
138141 SET p2 = p2 + 1;
139142END;
143+ $$
140144DELIMITER ;$$
141145
142146--echo # End of 11.8 tests
147+
148+ --echo #
149+ --echo # MDEV-37054: Implement INFORMATION_SCHEMA.PARAMETERS.PARAMETER_DEFAULT column
150+ --echo #
151+
152+ CREATE TABLE t (a INT);
153+ INSERT INTO t values (1);
154+
155+ --echo # Procedure with default parameters
156+
157+ DELIMITER //;
158+
159+ # No parameter default & constant default parameters
160+ CREATE OR REPLACE PROCEDURE p1(a INT,
161+ b INTEGER DEFAULT 9999,
162+ c INT DEFAULT NULL) DETERMINISTIC
163+ BEGIN
164+ SELECT b;
165+ END;
166+ //
167+
168+ CREATE OR REPLACE PROCEDURE p2(a INT DEFAULT 99,
169+ b VARCHAR(5) DEFAULT 'maria',
170+ c VARCHAR(10) DEFAULT CONCAT(b, 'db'))
171+ BEGIN
172+ SELECT b;
173+ END;
174+ //
175+
176+ # Default parameter as an epxression and function
177+ CREATE OR REPLACE PROCEDURE p3(a INT DEFAULT 1,
178+ b INT DEFAULT (a+1),
179+ c INT DEFAULT POW(2,b),
180+ d INET6 DEFAULT INET6_NTOA(UNHEX('0A000101')))
181+ BEGIN
182+ SELECT a, b, c FROM DUAL;
183+ END;
184+ //
185+
186+ # Subquery as default value
187+ CREATE OR REPLACE PROCEDURE p4(x INT DEFAULT (SELECT a from t))
188+ BEGIN
189+ SELECT x FROM DUAL;
190+ END;
191+ //
192+
193+ # another stored function as a default parameter
194+ CREATE OR REPLACE FUNCTION func(a INT DEFAULT 123) RETURNS INT
195+ BEGIN
196+ RETURN a;
197+ END;
198+ //
199+
200+ CREATE OR REPLACE PROCEDURE p5(x INT DEFAULT func())
201+ BEGIN
202+ SELECT x FROM DUAL;
203+ END;
204+ //
205+
206+ # date-time functions as default params
207+ CREATE OR REPLACE PROCEDURE p6(a TIMESTAMP DEFAULT NOW(), b DATE DEFAULT CURDATE())
208+ BEGIN
209+ SELECT a, b;
210+ END;
211+ //
212+
213+ # sql_mode specific functions as default params
214+ CREATE OR REPLACE PROCEDURE p7(a VARCHAR(5) DEFAULT 'maria',
215+ b VARCHAR(10) DEFAULT CONCAT(a, NULL, 'db'))
216+ BEGIN
217+ SELECT b from dual;
218+ END;
219+ //
220+
221+ DELIMITER ;//
222+
223+ --echo # Constant default parameters
224+ query_vertical SHOW CREATE PROCEDURE p1;
225+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p1';
226+
227+ query_vertical SHOW CREATE PROCEDURE p2;
228+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p2';
229+
230+ --echo # Default parameter as an epxression and function
231+ CALL p3();
232+ query_vertical SHOW CREATE PROCEDURE p3;
233+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p3';
234+
235+ --echo # Subquery as default value
236+ query_vertical SHOW CREATE PROCEDURE p4;
237+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p4';
238+
239+ --echo # another stored function as a default parameter
240+ query_vertical SHOW CREATE PROCEDURE p5;
241+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p5';
242+
243+ --echo # date-time functions as default params
244+ query_vertical SHOW CREATE PROCEDURE p6;
245+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p6';
246+
247+ --echo # sql_mode specific functions as default params
248+ query_vertical SHOW CREATE PROCEDURE p7;
249+
250+ --echo # sql_mode=DEFAULT
251+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p7';
252+
253+ --echo # sql_mode=ORACLE
254+ SET sql_mode=ORACLE;
255+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'p7';
256+ SET sql_mode=DEFAULT;
257+
258+ DROP PROCEDURE p1;
259+ DROP PROCEDURE p2;
260+ DROP PROCEDURE p3;
261+ DROP PROCEDURE p4;
262+ DROP PROCEDURE p5;
263+ DROP PROCEDURE p6;
264+ DROP PROCEDURE p7;
265+ DROP FUNCTION func;
266+
267+ --echo # Functions with defualt parameters
268+
269+ DELIMITER //;
270+
271+ CREATE OR REPLACE FUNCTION f1(a INT, b INT DEFAULT 9999, c INT DEFAULT NULL) RETURNS INT
272+ BEGIN
273+ RETURN b;
274+ END;
275+ //
276+
277+ # Default parameter as an expression
278+ CREATE OR REPLACE FUNCTION f2(a INT DEFAULT 99, b INT DEFAULT (a+1)) RETURNS INT
279+ BEGIN
280+ RETURN b;
281+ END;
282+ //
283+
284+ # Default param as function
285+ CREATE OR REPLACE FUNCTION f3(a INT DEFAULT 8,
286+ b INT DEFAULT LOG2(a),
287+ c VARCHAR(5) DEFAULT (IF(LOG2(a)=3,'yes','no'))) RETURNS INT
288+ BEGIN
289+ RETURN b;
290+ END;
291+ //
292+
293+ # Subquery as function's default parameter
294+ CREATE OR REPLACE FUNCTION f4(x INT DEFAULT (SELECT a FROM t)) RETURNS INT
295+ BEGIN
296+ RETURN x;
297+ END;
298+ //
299+
300+ # date-time functions as default params
301+ CREATE OR REPLACE FUNCTION f5(a TIMESTAMP DEFAULT NOW(), b DATE DEFAULT CURDATE()) RETURNS DATE
302+ BEGIN
303+ RETURN b;
304+ END;
305+ //
306+
307+ # sql_mode specific functions as default params
308+ CREATE OR REPLACE FUNCTION f6(a VARCHAR(5) DEFAULT 'maria',
309+ b VARCHAR(10) DEFAULT CONCAT(a, NULL, 'db')) RETURNS VARCHAR(10)
310+ BEGIN
311+ RETURN b;
312+ END;
313+ //
314+
315+ DELIMITER ;//
316+
317+ --echo # Constant Default parameter
318+ query_vertical SHOW CREATE FUNCTION f1;
319+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'f1';
320+
321+ --echo # Default parameter as an expression
322+ query_vertical SHOW CREATE FUNCTION f2;
323+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'f2';
324+
325+ --echo # Default parameter as a function
326+ query_vertical SHOW CREATE FUNCTION f3;
327+ SELECT f3();
328+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'f3';
329+
330+ --echo # Subquery as function's default parameter
331+ query_vertical SHOW CREATE FUNCTION f4;
332+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'f4';
333+
334+ --echo # date-time functions as default params
335+ query_vertical SHOW CREATE FUNCTION f5;
336+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'f5';
337+
338+ --echo # sql_mode specific functions as default params
339+ query_vertical SHOW CREATE FUNCTION f6;
340+
341+ --echo # sql_mode=DEFAULT
342+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'f6';
343+
344+ --echo # sql_mode=ORACLE
345+ SET sql_mode=ORACLE;
346+ SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = 'f6';
347+ SET sql_mode=DEFAULT;
348+
349+ DROP FUNCTION f1;
350+ DROP FUNCTION f2;
351+ DROP FUNCTION f3;
352+ DROP FUNCTION f4;
353+ DROP FUNCTION f5;
354+ DROP FUNCTION f6;
355+ DROP TABLE t;
356+
357+ --echo # Test to verify consistent printing of default values
358+ --echo # This test checks that a column's default value and a parameter's default
359+ --echo # value are printed in the same way.
360+
361+ CREATE TABLE t (a1 INT,
362+ a2 INT DEFAULT NULL,
363+ a3 INT NOT NULL,
364+ a4 VARCHAR(10) NOT NULL,
365+ b INT DEFAULT 1,
366+ c INT DEFAULT (b+1),
367+ d INT DEFAULT POW(2,b),
368+ e VARCHAR(10) DEFAULT 'maria',
369+ f VARCHAR(10) DEFAULT CONCAT(e,'db'));
370+
371+ DELIMITER //;
372+ CREATE PROCEDURE proc(a1 INT,
373+ a2 INT DEFAULT NULL,
374+ b INT DEFAULT 1,
375+ c INT DEFAULT (b+1),
376+ d INT DEFAULT POW(2,b),
377+ e VARCHAR(10) DEFAULT 'maria',
378+ f VARCHAR(10) DEFAULT CONCAT(e,'db'))
379+ BEGIN
380+ SELECT d FROM DUAL;
381+ END;
382+ //
383+ DELIMITER ;//
384+
385+ SELECT COLUMN_NAME, COLUMN_DEFAULT, (COLUMN_DEFAULT IS NULL) AS `IS_NULL` FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't';
386+ SELECT PARAMETER_NAME, PARAMETER_DEFAULT, (PARAMETER_DEFAULT IS NULL) AS `IS_NULL` FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME = 'proc';
387+
388+ DROP TABLE t;
389+ DROP PROCEDURE proc;
390+
391+ --echo # End of 12.2 tests
0 commit comments