mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / t / sp-vars.test
blobfe063889f81a3ca964b9663516aec6c54821b5af
1 ###########################################################################
3 # Cleanup.
5 ###########################################################################
7 --disable_warnings
9 # Drop stored routines (if any) for general SP-vars test cases. These routines
10 # are created in include/sp-vars.inc file.
12 DROP PROCEDURE IF EXISTS sp_vars_check_dflt;
13 DROP PROCEDURE IF EXISTS sp_vars_check_assignment;
14 DROP FUNCTION IF EXISTS sp_vars_check_ret1;
15 DROP FUNCTION IF EXISTS sp_vars_check_ret2;
16 DROP FUNCTION IF EXISTS sp_vars_check_ret3;
17 DROP FUNCTION IF EXISTS sp_vars_check_ret4;
18 DROP FUNCTION IF EXISTS sp_vars_div_zero;
20 --enable_warnings
22 ###########################################################################
24 # Some general tests for SP-vars functionality.
26 ###########################################################################
28 # Create the procedure in ANSI mode. Check that all necessary warnings are
29 # emitted properly.
31 SET @@sql_mode = 'ansi';
33 --source include/sp-vars.inc
35 --echo
36 --echo ---------------------------------------------------------------
37 --echo Calling the routines, created in ANSI mode.
38 --echo ---------------------------------------------------------------
39 --echo
41 CALL sp_vars_check_dflt();
43 CALL sp_vars_check_assignment();
45 SELECT sp_vars_check_ret1();
47 SELECT sp_vars_check_ret2();
49 SELECT sp_vars_check_ret3();
51 SELECT sp_vars_check_ret4();
53 SELECT sp_vars_div_zero();
55 # Check that changing sql_mode after creating a store procedure does not
56 # matter.
58 SET @@sql_mode = 'traditional';
60 --echo
61 --echo ---------------------------------------------------------------
62 --echo Calling in TRADITIONAL mode the routines, created in ANSI mode.
63 --echo ---------------------------------------------------------------
64 --echo
66 CALL sp_vars_check_dflt();
68 CALL sp_vars_check_assignment();
70 SELECT sp_vars_check_ret1();
72 SELECT sp_vars_check_ret2();
74 SELECT sp_vars_check_ret3();
76 SELECT sp_vars_check_ret4();
78 SELECT sp_vars_div_zero();
80 # Create the procedure in TRADITIONAL mode. Check that error will be thrown on
81 # execution.
83 DROP PROCEDURE sp_vars_check_dflt;
84 DROP PROCEDURE sp_vars_check_assignment;
85 DROP FUNCTION sp_vars_check_ret1;
86 DROP FUNCTION sp_vars_check_ret2;
87 DROP FUNCTION sp_vars_check_ret3;
88 DROP FUNCTION sp_vars_check_ret4;
89 DROP FUNCTION sp_vars_div_zero;
91 --source include/sp-vars.inc
93 --echo
94 --echo ---------------------------------------------------------------
95 --echo Calling the routines, created in TRADITIONAL mode.
96 --echo ---------------------------------------------------------------
97 --echo
99 --error ER_WARN_DATA_OUT_OF_RANGE
100 CALL sp_vars_check_dflt();
102 --error ER_WARN_DATA_OUT_OF_RANGE
103 CALL sp_vars_check_assignment();
105 --error ER_WARN_DATA_OUT_OF_RANGE
106 SELECT sp_vars_check_ret1();
108 --error ER_WARN_DATA_OUT_OF_RANGE
109 SELECT sp_vars_check_ret2();
111 --error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
112 SELECT sp_vars_check_ret3();
114 # TODO: Is it an error, that only a warning is emitted here? Check the same
115 # behaviour with tables.
117 SELECT sp_vars_check_ret4();
119 --error ER_DIVISION_BY_ZERO
120 SELECT sp_vars_div_zero();
122 SET @@sql_mode = 'ansi';
125 # Cleanup.
128 DROP PROCEDURE sp_vars_check_dflt;
129 DROP PROCEDURE sp_vars_check_assignment;
130 DROP FUNCTION sp_vars_check_ret1;
131 DROP FUNCTION sp_vars_check_ret2;
132 DROP FUNCTION sp_vars_check_ret3;
133 DROP FUNCTION sp_vars_check_ret4;
134 DROP FUNCTION sp_vars_div_zero;
136 ###########################################################################
138 # Tests for BIT data type.
140 ###########################################################################
142 --echo
143 --echo ---------------------------------------------------------------
144 --echo BIT data type tests
145 --echo ---------------------------------------------------------------
146 --echo
149 # Prepare.
152 --disable_warnings
153 DROP PROCEDURE IF EXISTS p1;
154 --enable_warnings
157 # Test case.
160 delimiter |;
161 CREATE PROCEDURE p1()
162 BEGIN
163   DECLARE v1 BIT;
164   DECLARE v2 BIT(1);
165   DECLARE v3 BIT(3) DEFAULT b'101';
166   DECLARE v4 BIT(64) DEFAULT 0x5555555555555555;
167   DECLARE v5 BIT(3);
168   DECLARE v6 BIT(64);
169   DECLARE v7 BIT(8) DEFAULT 128;
170   DECLARE v8 BIT(8) DEFAULT '128';
171   DECLARE v9 BIT(8) DEFAULT ' 128';
172   DECLARE v10 BIT(8) DEFAULT 'x 128';
174   SET v1 = v4;
175   SET v2 = 0;
176   SET v5 = v4; # check overflow
177   SET v6 = v3; # check padding
179   SELECT HEX(v1);
180   SELECT HEX(v2);
181   SELECT HEX(v3);
182   SELECT HEX(v4);
183   SELECT HEX(v5);
184   SELECT HEX(v6);
185   SELECT HEX(v7);
186   SELECT HEX(v8);
187   SELECT HEX(v9);
188   SELECT HEX(v10);
189 END|
190 delimiter ;|
192 CALL p1();
195 # Cleanup.
198 DROP PROCEDURE p1;
200 ###########################################################################
202 # Tests for CASE statements functionality:
203 #   - test for general functionality (scopes, nested cases, CASE in loops);
204 #   - test that if type of the CASE expression is changed on each iteration,
205 #     the execution will be correct.
207 ###########################################################################
209 --echo
210 --echo ---------------------------------------------------------------
211 --echo CASE expression tests.
212 --echo ---------------------------------------------------------------
213 --echo
216 # Prepare.
219 DROP PROCEDURE IF EXISTS p1;
220 DROP PROCEDURE IF EXISTS p2;
221 DROP TABLE IF EXISTS t1;
224 # Test case.
227 CREATE TABLE t1(log_msg VARCHAR(1024));
229 delimiter |;
231 CREATE PROCEDURE p1(arg VARCHAR(255))
232 BEGIN
233   INSERT INTO t1 VALUES('p1: step1');
235   CASE arg * 10
236     WHEN 10 * 10 THEN
237       INSERT INTO t1 VALUES('p1: case1: on 10');
238     WHEN 10 * 10 + 10 * 10 THEN
239       BEGIN
240         CASE arg / 10
241           WHEN 1 THEN
242             INSERT INTO t1 VALUES('p1: case1: case2: on 1');
243           WHEN 2 THEN
244             BEGIN
245               DECLARE i TINYINT DEFAULT 10;
247               WHILE i > 0 DO
248                 INSERT INTO t1 VALUES(CONCAT('p1: case1: case2: loop: i: ', i));
249                 
250                 CASE MOD(i, 2)
251                   WHEN 0 THEN
252                     INSERT INTO t1 VALUES('p1: case1: case2: loop: i is even');
253                   WHEN 1 THEN
254                     INSERT INTO t1 VALUES('p1: case1: case2: loop: i is odd');
255                   ELSE
256                     INSERT INTO t1 VALUES('p1: case1: case2: loop: ERROR');
257                 END CASE;
258                     
259                 SET i = i - 1;
260               END WHILE;
261             END;
262           ELSE
263             INSERT INTO t1 VALUES('p1: case1: case2: ERROR');
264         END CASE;
266         CASE arg
267           WHEN 10 THEN
268             INSERT INTO t1 VALUES('p1: case1: case3: on 10');
269           WHEN 20 THEN
270             INSERT INTO t1 VALUES('p1: case1: case3: on 20');
271           ELSE
272             INSERT INTO t1 VALUES('p1: case1: case3: ERROR');
273         END CASE;
274       END;
275     ELSE
276       INSERT INTO t1 VALUES('p1: case1: ERROR');
277   END CASE;
279   CASE arg * 10
280     WHEN 10 * 10 THEN
281       INSERT INTO t1 VALUES('p1: case4: on 10');
282     WHEN 10 * 10 + 10 * 10 THEN
283       BEGIN
284         CASE arg / 10
285           WHEN 1 THEN
286             INSERT INTO t1 VALUES('p1: case4: case5: on 1');
287           WHEN 2 THEN
288             BEGIN
289               DECLARE i TINYINT DEFAULT 10;
291               WHILE i > 0 DO
292                 INSERT INTO t1 VALUES(CONCAT('p1: case4: case5: loop: i: ', i));
293                 
294                 CASE MOD(i, 2)
295                   WHEN 0 THEN
296                     INSERT INTO t1 VALUES('p1: case4: case5: loop: i is even');
297                   WHEN 1 THEN
298                     INSERT INTO t1 VALUES('p1: case4: case5: loop: i is odd');
299                   ELSE
300                     INSERT INTO t1 VALUES('p1: case4: case5: loop: ERROR');
301                 END CASE;
302                     
303                 SET i = i - 1;
304               END WHILE;
305             END;
306           ELSE
307             INSERT INTO t1 VALUES('p1: case4: case5: ERROR');
308         END CASE;
310         CASE arg
311           WHEN 10 THEN
312             INSERT INTO t1 VALUES('p1: case4: case6: on 10');
313           WHEN 20 THEN
314             INSERT INTO t1 VALUES('p1: case4: case6: on 20');
315           ELSE
316             INSERT INTO t1 VALUES('p1: case4: case6: ERROR');
317         END CASE;
318       END;
319     ELSE
320       INSERT INTO t1 VALUES('p1: case4: ERROR');
321   END CASE;
322 END|
324 CREATE PROCEDURE p2()
325 BEGIN
326   DECLARE i TINYINT DEFAULT 3;
328   WHILE i > 0 DO
329     IF MOD(i, 2) = 0 THEN
330       SET @_test_session_var = 10;
331     ELSE
332       SET @_test_session_var = 'test';
333     END IF;
335     CASE @_test_session_var
336       WHEN 10 THEN
337         INSERT INTO t1 VALUES('p2: case: numerical type');
338       WHEN 'test' THEN
339         INSERT INTO t1 VALUES('p2: case: string type');
340       ELSE
341         INSERT INTO t1 VALUES('p2: case: ERROR');
342     END CASE;
344     SET i = i - 1;
345   END WHILE;
346 END|
348 delimiter ;|
350 CALL p1(10);
351 CALL p1(20);
353 CALL p2();
355 SELECT * FROM t1;
358 # Cleanup.
361 DROP PROCEDURE p1;
362 DROP PROCEDURE p2;
363 DROP TABLE t1;
365 ###########################################################################
367 # Test case for BUG#14161: Stored procedure cannot retrieve bigint unsigned.
369 ###########################################################################
371 --echo
372 --echo ---------------------------------------------------------------
373 --echo BUG#14161
374 --echo ---------------------------------------------------------------
375 --echo
378 # Prepare.
381 --disable_warnings
382 DROP TABLE IF EXISTS t1;
383 DROP PROCEDURE IF EXISTS p1;
384 --enable_warnings
387 # Test case.
390 CREATE TABLE t1(col BIGINT UNSIGNED);
392 INSERT INTO t1 VALUE(18446744073709551614);
394 delimiter |;
395 CREATE PROCEDURE p1(IN arg BIGINT UNSIGNED)
396 BEGIN
397   SELECT arg;
398   SELECT * FROM t1;
399   SELECT * FROM t1 WHERE col = arg;
400 END|
401 delimiter ;|
403 CALL p1(18446744073709551614);
406 # Cleanup.
409 DROP TABLE t1;
410 DROP PROCEDURE p1;
412 ###########################################################################
414 # Test case for BUG#13705: parameters to stored procedures are not verified.
416 ###########################################################################
418 --echo
419 --echo ---------------------------------------------------------------
420 --echo BUG#13705
421 --echo ---------------------------------------------------------------
422 --echo
425 # Prepare.
428 --disable_warnings
429 DROP PROCEDURE IF EXISTS p1;
430 --enable_warnings
433 # Test case.
436 delimiter |;
437 CREATE PROCEDURE p1(x VARCHAR(10), y CHAR(3)) READS SQL DATA
438 BEGIN
439   SELECT x, y;
440 END|
441 delimiter ;|
443 CALL p1('alpha', 'abc');
444 CALL p1('alpha', 'abcdef');
447 # Cleanup.
450 DROP PROCEDURE p1;
452 ###########################################################################
454 # Test case for BUG#13675: DATETIME/DATE type in store proc param seems to be
455 # converted as varbinary.
457 # TODO: test case failed.
459 ###########################################################################
461 --echo
462 --echo ---------------------------------------------------------------
463 --echo BUG#13675
464 --echo ---------------------------------------------------------------
465 --echo
468 # Prepare.
471 --disable_warnings
472 DROP PROCEDURE IF EXISTS p1;
473 DROP TABLE IF EXISTS t1;
474 --enable_warnings
477 # Test case.
480 delimiter |;
481 CREATE PROCEDURE p1(x DATETIME)
482 BEGIN
483   CREATE TABLE t1 SELECT x;
484   SHOW CREATE TABLE t1;
485   DROP TABLE t1;
486 END|
487 delimiter ;|
489 CALL p1(NOW());
491 CALL p1('test');
494 # Cleanup.
497 DROP PROCEDURE p1;
499 ###########################################################################
501 # Test case for BUG#12976: Boolean values reversed in stored procedures?
503 ###########################################################################
505 --echo
506 --echo ---------------------------------------------------------------
507 --echo BUG#12976
508 --echo ---------------------------------------------------------------
509 --echo
512 # Prepare.
515 --disable_warnings
516 DROP TABLE IF EXISTS t1;
517 DROP PROCEDURE IF EXISTS p1;
518 DROP PROCEDURE IF EXISTS p2;
519 --enable_warnings
522 # Test case.
525 CREATE TABLE t1(b BIT(1));
527 INSERT INTO t1(b) VALUES(b'0'), (b'1');
529 delimiter |;
530 CREATE PROCEDURE p1()
531 BEGIN
532   SELECT HEX(b),
533     b = 0,
534     b = FALSE,
535     b IS FALSE,
536     b = 1,
537     b = TRUE,
538     b IS TRUE
539   FROM t1;
540 END|
542 CREATE PROCEDURE p2()
543 BEGIN
544   DECLARE vb BIT(1);
545   SELECT b INTO vb FROM t1 WHERE b = 0;
547   SELECT HEX(vb),
548     vb = 0,
549     vb = FALSE,
550     vb IS FALSE,
551     vb = 1,
552     vb = TRUE,
553     vb IS TRUE;
555   SELECT b INTO vb FROM t1 WHERE b = 1;
557   SELECT HEX(vb),
558     vb = 0,
559     vb = FALSE,
560     vb IS FALSE,
561     vb = 1,
562     vb = TRUE,
563     vb IS TRUE;
564 END|
565 delimiter ;|
567 call p1();
569 call p2();
572 # Cleanup.
575 DROP TABLE t1;
576 DROP PROCEDURE p1;
577 DROP PROCEDURE p2;
579 # Additional tests for Bug#12976
581 --disable_warnings
582 DROP TABLE IF EXISTS table_12976_a;
583 DROP TABLE IF EXISTS table_12976_b;
584 DROP PROCEDURE IF EXISTS proc_12976_a;
585 DROP PROCEDURE IF EXISTS proc_12976_b;
586 --enable_warnings
588 CREATE TABLE table_12976_a (val bit(1));
590 CREATE TABLE table_12976_b(
591   appname varchar(15),
592   emailperm bit not null default 1,
593   phoneperm bit not null default 0);
595 insert into table_12976_b values ('A', b'1', b'1'), ('B', b'0', b'0');
597 delimiter ||;
598 CREATE PROCEDURE proc_12976_a()
599 BEGIN
600   declare localvar bit(1);
601   SELECT val INTO localvar FROM table_12976_a;
602   SELECT coalesce(localvar, 1)+1, coalesce(val, 1)+1 FROM table_12976_a;
603 END||
605 CREATE PROCEDURE proc_12976_b(
606   name varchar(15),
607   out ep bit,
608   out msg varchar(10))
609 BEGIN
610   SELECT emailperm into ep FROM table_12976_b where (appname = name);
611   IF ep is true THEN
612     SET msg = 'True';
613   ELSE
614     SET msg = 'False';
615   END IF;
616 END||
618 delimiter ;||
620 INSERT table_12976_a VALUES (0);
621 call proc_12976_a();
622 UPDATE table_12976_a set val=1;
623 call proc_12976_a();
625 call proc_12976_b('A', @ep, @msg);
626 select @ep, @msg;
628 call proc_12976_b('B', @ep, @msg);
629 select @ep, @msg;
631 DROP TABLE table_12976_a;
632 DROP TABLE table_12976_b;
633 DROP PROCEDURE proc_12976_a;
634 DROP PROCEDURE proc_12976_b;
637 ###########################################################################
639 # Test case for BUG#9572: Stored procedures: variable type declarations
640 # ignored.
642 ###########################################################################
644 --echo
645 --echo ---------------------------------------------------------------
646 --echo BUG#9572
647 --echo ---------------------------------------------------------------
648 --echo
651 # Prepare.
654 --disable_warnings
655 DROP PROCEDURE IF EXISTS p1;
656 DROP PROCEDURE IF EXISTS p2;
657 DROP PROCEDURE IF EXISTS p3;
659 DROP PROCEDURE IF EXISTS p4;
660 DROP PROCEDURE IF EXISTS p5;
661 DROP PROCEDURE IF EXISTS p6;
662 --enable_warnings
665 # Test case.
668 SET @@sql_mode = 'traditional';
670 delimiter |;
672 CREATE PROCEDURE p1()
673 BEGIN
674   DECLARE v TINYINT DEFAULT 1e200;
675   SELECT v;
676 END|
678 CREATE PROCEDURE p2()
679 BEGIN
680   DECLARE v DECIMAL(5) DEFAULT 1e200;
681   SELECT v;
682 END|
684 CREATE PROCEDURE p3()
685 BEGIN
686   DECLARE v CHAR(5) DEFAULT 'abcdef';
687   SELECT v LIKE 'abc___';
688 END|
690 CREATE PROCEDURE p4(arg VARCHAR(2))
691 BEGIN
692     DECLARE var VARCHAR(1);
693     SET var := arg;
694     SELECT arg, var;
695 END|
697 CREATE PROCEDURE p5(arg CHAR(2))
698 BEGIN
699     DECLARE var CHAR(1);
700     SET var := arg;
701     SELECT arg, var;
702 END|
704 CREATE PROCEDURE p6(arg DECIMAL(2))
705 BEGIN
706     DECLARE var DECIMAL(1);
707     SET var := arg;
708     SELECT arg, var;
709 END|
711 delimiter ;|
713 --error ER_WARN_DATA_OUT_OF_RANGE
714 CALL p1();
715 --error ER_WARN_DATA_OUT_OF_RANGE
716 CALL p2();
717 --error ER_DATA_TOO_LONG
718 CALL p3();
720 --error ER_DATA_TOO_LONG
721 CALL p4('aaa'); 
722 --error ER_DATA_TOO_LONG
723 CALL p5('aa');
724 --error ER_WARN_DATA_OUT_OF_RANGE
725 CALL p6(10);
728 # Cleanup.
731 SET @@sql_mode = 'ansi';
733 DROP PROCEDURE p1;
734 DROP PROCEDURE p2;
735 DROP PROCEDURE p3;
737 DROP PROCEDURE p4;
738 DROP PROCEDURE p5;
739 DROP PROCEDURE p6;
741 ###########################################################################
743 # Test case for BUG#9078: STORED PROCDURE: Decimal digits are not displayed
744 # when we use DECIMAL datatype.
746 ###########################################################################
748 --echo
749 --echo ---------------------------------------------------------------
750 --echo BUG#9078
751 --echo ---------------------------------------------------------------
752 --echo
755 # Prepare.
758 --disable_warnings
759 DROP PROCEDURE IF EXISTS p1;
760 --enable_warnings
763 # Test case.
766 delimiter |;
767 CREATE PROCEDURE p1 (arg DECIMAL(64,2))
768 BEGIN
769   DECLARE var DECIMAL(64,2);
771   SET var = arg;
772   SELECT var;
773 END|
774 delimiter ;|
776 CALL p1(1929);
777 CALL p1(1929.00);
778 CALL p1(1929.003);
781 # Cleanup.
784 DROP PROCEDURE p1;
786 ###########################################################################
788 # Test case for BUG#8768: Functions: For any unsigned data type, -ve values can
789 # be passed and returned.
791 # TODO: there is a bug here -- the function created in ANSI mode should not
792 # throw errors instead of warnings if called in TRADITIONAL mode.
794 ###########################################################################
796 --echo
797 --echo ---------------------------------------------------------------
798 --echo BUG#8768
799 --echo ---------------------------------------------------------------
800 --echo
803 # Prepare.
806 --disable_warnings
807 DROP FUNCTION IF EXISTS f1;
808 --enable_warnings
811 # Test case.
814 # Create a function in ANSI mode.
816 delimiter |;
817 CREATE FUNCTION f1(arg TINYINT UNSIGNED) RETURNS TINYINT
818 BEGIN
819   RETURN arg;
820 END|
821 delimiter ;|
823 SELECT f1(-2500);
825 # Call in TRADITIONAL mode the function created in ANSI mode.
827 SET @@sql_mode = 'traditional';
829 # TODO: a warning should be emitted here.
830 --error ER_WARN_DATA_OUT_OF_RANGE
831 SELECT f1(-2500);
833 # Recreate the function in TRADITIONAL mode.
835 DROP FUNCTION f1;
837 delimiter |;
838 CREATE FUNCTION f1(arg TINYINT UNSIGNED) RETURNS TINYINT
839 BEGIN
840   RETURN arg;
841 END|
842 delimiter ;|
844 --error ER_WARN_DATA_OUT_OF_RANGE
845 SELECT f1(-2500);
848 # Cleanup.
851 SET @@sql_mode = 'ansi';
853 DROP FUNCTION f1;
855 ###########################################################################
857 # Test case for BUG#8769: Functions: For Int datatypes, out of range values can
858 # be passed and returned.
860 # TODO: there is a bug here -- the function created in ANSI mode should not
861 # throw errors instead of warnings if called in TRADITIONAL mode.
863 ###########################################################################
865 --echo
866 --echo ---------------------------------------------------------------
867 --echo BUG#8769
868 --echo ---------------------------------------------------------------
869 --echo
872 # Prepare.
875 --disable_warnings
876 DROP FUNCTION IF EXISTS f1;
877 --enable_warnings
880 # Test case.
883 # Create a function in ANSI mode.
885 delimiter |;
886 CREATE FUNCTION f1(arg MEDIUMINT) RETURNS MEDIUMINT
887 BEGIN
888   RETURN arg;
889 END|
890 delimiter ;|
892 SELECT f1(8388699);
894 # Call in TRADITIONAL mode the function created in ANSI mode.
896 SET @@sql_mode = 'traditional';
898 # TODO: a warning should be emitted here.
899 --error ER_WARN_DATA_OUT_OF_RANGE
900 SELECT f1(8388699);
902 # Recreate the function in TRADITIONAL mode.
904 DROP FUNCTION f1;
906 delimiter |;
907 CREATE FUNCTION f1(arg MEDIUMINT) RETURNS MEDIUMINT
908 BEGIN
909   RETURN arg;
910 END|
911 delimiter ;|
913 --error ER_WARN_DATA_OUT_OF_RANGE
914 SELECT f1(8388699);
917 # Cleanup.
920 SET @@sql_mode = 'ansi';
922 DROP FUNCTION f1;
924 ###########################################################################
926 # Test case for BUG#8702: Stored Procedures: No Error/Warning shown for
927 # inappropriate data type matching.
929 ###########################################################################
931 --echo
932 --echo ---------------------------------------------------------------
933 --echo BUG#8702
934 --echo ---------------------------------------------------------------
935 --echo
938 # Prepare.
941 --disable_warnings
942 DROP PROCEDURE IF EXISTS p1;
943 DROP TABLE IF EXISTS t1;
944 --enable_warnings
947 # Test case.
950 CREATE TABLE t1(col VARCHAR(255));
952 INSERT INTO t1(col) VALUES('Hello, world!');
954 delimiter |;
955 CREATE PROCEDURE p1()
956 BEGIN
957   DECLARE sp_var INTEGER;
959   SELECT col INTO sp_var FROM t1 LIMIT 1;
960   SET @user_var = sp_var;
962   SELECT sp_var;
963   SELECT @user_var;
964 END|
965 delimiter ;|
967 CALL p1();
970 # Cleanup.
973 DROP PROCEDURE p1;
974 DROP TABLE t1;
976 ###########################################################################
978 # Test case for BUG#12903: upper function does not work inside a function.
980 ###########################################################################
982 --echo
983 --echo ---------------------------------------------------------------
984 --echo BUG#12903
985 --echo ---------------------------------------------------------------
986 --echo
989 # Prepare.
992 --disable_warnings
993 DROP FUNCTION IF EXISTS f1;
994 DROP TABLE IF EXISTS t1;
995 --enable_warnings
998 # Test case.
1001 CREATE TABLE t1(txt VARCHAR(255));
1003 delimiter |;
1004 CREATE FUNCTION f1(arg VARCHAR(255)) RETURNS VARCHAR(255)
1005 BEGIN
1006   DECLARE v1 VARCHAR(255);
1007   DECLARE v2 VARCHAR(255);
1009   SET v1 = CONCAT(LOWER(arg), UPPER(arg));
1010   SET v2 = CONCAT(LOWER(v1), UPPER(v1));
1012   INSERT INTO t1 VALUES(v1), (v2);
1014   RETURN CONCAT(LOWER(arg), UPPER(arg));
1015 END|
1016 delimiter ;|
1018 SELECT f1('_aBcDe_');
1020 SELECT * FROM t1;
1023 # Cleanup.
1026 DROP FUNCTION f1;
1027 DROP TABLE t1;
1029 ###########################################################################
1031 # Test case for BUG#13808: ENUM type stored procedure parameter accepts
1032 # non-enumerated data.
1034 ###########################################################################
1036 --echo
1037 --echo ---------------------------------------------------------------
1038 --echo BUG#13808
1039 --echo ---------------------------------------------------------------
1040 --echo
1043 # Prepare.
1046 --disable_warnings
1047 DROP PROCEDURE IF EXISTS p1;
1048 DROP PROCEDURE IF EXISTS p2;
1049 DROP FUNCTION IF EXISTS f1;
1050 --enable_warnings
1053 # Test case.
1056 delimiter |;
1058 CREATE PROCEDURE p1(arg ENUM('a', 'b'))
1059 BEGIN
1060   SELECT arg;
1061 END|
1063 CREATE PROCEDURE p2(arg ENUM('a', 'b'))
1064 BEGIN
1065   DECLARE var ENUM('c', 'd') DEFAULT arg;
1067   SELECT arg, var;
1068 END|
1070 CREATE FUNCTION f1(arg ENUM('a', 'b')) RETURNS ENUM('c', 'd')
1071 BEGIN
1072   RETURN arg;
1073 END|
1075 delimiter ;|
1077 CALL p1('c');
1079 CALL p2('a');
1081 SELECT f1('a');
1084 # Cleanup.
1087 DROP PROCEDURE p1;
1088 DROP PROCEDURE p2;
1089 DROP FUNCTION f1;
1091 ###########################################################################
1093 # Test case for BUG#13909: Varchar Stored Procedure Parameter always BINARY
1094 # string (ignores CHARACTER SET).
1096 ###########################################################################
1098 --echo
1099 --echo ---------------------------------------------------------------
1100 --echo BUG#13909
1101 --echo ---------------------------------------------------------------
1102 --echo
1105 # Prepare.
1108 --disable_warnings
1109 DROP PROCEDURE IF EXISTS p1;
1110 DROP PROCEDURE IF EXISTS p2;
1111 --enable_warnings
1114 # Test case.
1117 delimiter |;
1119 CREATE PROCEDURE p1(arg VARCHAR(255))
1120 BEGIN
1121   SELECT CHARSET(arg);
1122 END|
1124 CREATE PROCEDURE p2(arg VARCHAR(255) CHARACTER SET UTF8)
1125 BEGIN
1126     SELECT CHARSET(arg);
1127 END|
1129 delimiter ;|
1131 CALL p1('t');
1132 CALL p1(_UTF8 't');
1135 CALL p2('t');
1136 CALL p2(_LATIN1 't');
1139 # Cleanup.
1142 DROP PROCEDURE p1;
1143 DROP PROCEDURE p2;
1145 ###########################################################################
1147 # Test case for BUG#14188: BINARY variables have no 0x00 padding.
1149 ###########################################################################
1151 --echo
1152 --echo ---------------------------------------------------------------
1153 --echo BUG#14188
1154 --echo ---------------------------------------------------------------
1155 --echo
1158 # Prepare.
1161 --disable_warnings
1162 DROP PROCEDURE IF EXISTS p1;
1163 --enable_warnings
1166 # Test case.
1169 delimiter |;
1170 CREATE PROCEDURE p1(arg1 BINARY(2), arg2 VARBINARY(2))
1171 BEGIN
1172   DECLARE var1 BINARY(2) DEFAULT 0x41;
1173   DECLARE var2 VARBINARY(2) DEFAULT 0x42;
1175   SELECT HEX(arg1), HEX(arg2);
1176   SELECT HEX(var1), HEX(var2);
1177 END|
1178 delimiter ;|
1180 CALL p1(0x41, 0x42);
1183 # Cleanup.
1186 DROP PROCEDURE p1;
1188 ###########################################################################
1190 # Test case for BUG#15148: Stored procedure variables accept non-scalar values.
1192 ###########################################################################
1194 --echo
1195 --echo ---------------------------------------------------------------
1196 --echo BUG#15148
1197 --echo ---------------------------------------------------------------
1198 --echo
1201 # Prepare.
1204 --disable_warnings
1205 DROP PROCEDURE IF EXISTS p1;
1206 DROP TABLE IF EXISTS t1;
1207 --enable_warnings
1210 # Test case.
1213 CREATE TABLE t1(col1 TINYINT, col2 TINYINT);
1215 INSERT INTO t1 VALUES(1, 2), (11, 12);
1217 delimiter |;
1218 CREATE PROCEDURE p1(arg TINYINT)
1219 BEGIN
1220   SELECT arg;
1221 END|
1222 delimiter ;|
1224 --error ER_OPERAND_COLUMNS
1225 CALL p1((1, 2));
1227 --error ER_OPERAND_COLUMNS
1228 CALL p1((SELECT * FROM t1 LIMIT 1));
1230 --error ER_OPERAND_COLUMNS
1231 CALL p1((SELECT col1, col2 FROM t1 LIMIT 1));
1234 # Cleanup.
1237 DROP PROCEDURE p1;
1238 DROP TABLE t1;
1240 ###########################################################################
1242 # Test case for BUG#13613: substring function in stored procedure.
1244 ###########################################################################
1246 --echo
1247 --echo ---------------------------------------------------------------
1248 --echo BUG#13613
1249 --echo ---------------------------------------------------------------
1250 --echo
1253 # Prepare.
1256 --disable_warnings
1257 DROP PROCEDURE IF EXISTS p1;
1258 DROP FUNCTION IF EXISTS f1;
1259 --enable_warnings
1262 # Test case.
1265 delimiter |;
1267 CREATE PROCEDURE p1(x VARCHAR(50))
1268 BEGIN
1269   SET x = SUBSTRING(x, 1, 3);
1270   SELECT x;
1271 END|
1273 CREATE FUNCTION f1(x VARCHAR(50)) RETURNS VARCHAR(50)
1274 BEGIN
1275   RETURN SUBSTRING(x, 1, 3);
1276 END|
1278 delimiter ;|
1280 CALL p1('abcdef');
1282 SELECT f1('ABCDEF');
1285 # Cleanup.
1288 DROP PROCEDURE p1;
1289 DROP FUNCTION f1;
1291 ###########################################################################
1293 # Test case for BUG#13665: concat with '' produce incorrect results in SP.
1295 ###########################################################################
1297 --echo
1298 --echo ---------------------------------------------------------------
1299 --echo BUG#13665
1300 --echo ---------------------------------------------------------------
1301 --echo
1304 # Prepare.
1307 --disable_warnings
1308 DROP FUNCTION IF EXISTS f1;
1309 --enable_warnings
1312 # Test case.
1315 delimiter |;
1316 CREATE FUNCTION f1() RETURNS VARCHAR(20000)
1317 BEGIN
1318   DECLARE var VARCHAR(2000);
1320   SET var = '';
1321   SET var = CONCAT(var, 'abc');
1322   SET var = CONCAT(var, '');
1324   RETURN var;
1325 END|
1326 delimiter ;|
1328 SELECT f1();
1331 # Cleanup.
1334 DROP FUNCTION f1;
1338 # Bug#17226: Variable set in cursor on first iteration is assigned
1339 # second iterations value
1341 # The problem was in incorrect handling of local variables of type
1342 # TEXT (BLOB).
1344 --disable_warnings
1345 DROP PROCEDURE IF EXISTS p1;
1346 --enable_warnings
1348 delimiter |;
1349 CREATE PROCEDURE p1()
1350 BEGIN
1351   DECLARE v_char VARCHAR(255);
1352   DECLARE v_text TEXT DEFAULT '';
1354   SET v_char = 'abc';
1356   SET v_text = v_char;
1358   SET v_char = 'def';
1360   SET v_text = concat(v_text, '|', v_char);
1362   SELECT v_text;
1363 END|
1364 delimiter ;|
1366 CALL p1();
1368 DROP PROCEDURE p1;
1371 # Bug #27415 Text Variables in stored procedures
1372 # If the SP varible was also referenced on the right side
1373 # the result was corrupted.
1375 DELIMITER |;
1377 --disable_warnings
1378 DROP PROCEDURE IF EXISTS bug27415_text_test|
1379 DROP PROCEDURE IF EXISTS bug27415_text_test2|
1380 --enable_warnings
1382 CREATE PROCEDURE bug27415_text_test(entity_id_str_in text)
1383 BEGIN
1384     DECLARE str_remainder text;
1386     SET str_remainder = entity_id_str_in;
1388     select 'before substr', str_remainder;
1389     SET str_remainder = SUBSTRING(str_remainder, 3);
1390     select 'after substr', str_remainder;
1391 END|
1393 CREATE PROCEDURE bug27415_text_test2(entity_id_str_in text)
1394 BEGIN
1395     DECLARE str_remainder text;
1396     DECLARE str_remainder2 text;
1398     SET str_remainder2 = entity_id_str_in;
1399     select 'before substr', str_remainder2;
1400     SET str_remainder = SUBSTRING(str_remainder2, 3);
1401     select 'after substr', str_remainder;
1402 END|
1404 CALL bug27415_text_test('a,b,c')|
1405 CALL bug27415_text_test('a,b,c')|
1406 CALL bug27415_text_test2('a,b,c')|
1407 CALL bug27415_text_test('a,b,c')|
1409 DROP PROCEDURE bug27415_text_test|
1410 DROP PROCEDURE bug27415_text_test2|
1412 DELIMITER ;|
1414 # End of 5.0 tests.
1417 # Bug #26277 User variable returns one type in SELECT @v and other for CREATE as SELECT @v
1419 --disable_warnings
1420 drop function if exists f1;
1421 drop table if exists t1;
1422 --enable_warnings
1424 delimiter |;
1425 create function f1() returns int 
1426 begin
1427  if @a=1 then set @b='abc';
1428  else set @b=1;
1429  end if;
1430  set @a=1;
1431  return 0;
1432 end|
1434 create table t1 (a int)|
1435 insert into t1 (a) values (1), (2)|
1437 set @b=1|
1438 set @a=0|
1439 select f1(), @b from t1|
1441 set @b:='test'|
1442 set @a=0|
1443 select f1(), @b from t1|
1445 delimiter ;|
1447 drop function f1;
1448 drop table t1;
1449 # End of 5.1 tests.