1451 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			1451 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | ########################################################################### | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | 
 | ||
|  | # Drop stored routines (if any) for general SP-vars test cases. These routines | ||
|  | # are created in include/sp-vars.inc file. | ||
|  | 
 | ||
|  | DROP PROCEDURE IF EXISTS sp_vars_check_dflt; | ||
|  | DROP PROCEDURE IF EXISTS sp_vars_check_assignment; | ||
|  | DROP FUNCTION IF EXISTS sp_vars_check_ret1; | ||
|  | DROP FUNCTION IF EXISTS sp_vars_check_ret2; | ||
|  | DROP FUNCTION IF EXISTS sp_vars_check_ret3; | ||
|  | DROP FUNCTION IF EXISTS sp_vars_check_ret4; | ||
|  | DROP FUNCTION IF EXISTS sp_vars_div_zero; | ||
|  | 
 | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Some general tests for SP-vars functionality. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | # Create the procedure in ANSI mode. Check that all necessary warnings are | ||
|  | # emitted properly. | ||
|  | 
 | ||
|  | SET @@sql_mode = 'ansi'; | ||
|  | 
 | ||
|  | --source include/sp-vars.inc | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo Calling the routines, created in ANSI mode. | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | CALL sp_vars_check_dflt(); | ||
|  | 
 | ||
|  | CALL sp_vars_check_assignment(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret1(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret2(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret3(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret4(); | ||
|  | 
 | ||
|  | SELECT sp_vars_div_zero(); | ||
|  | 
 | ||
|  | # Check that changing sql_mode after creating a store procedure does not | ||
|  | # matter. | ||
|  | 
 | ||
|  | SET @@sql_mode = 'traditional'; | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo Calling in TRADITIONAL mode the routines, created in ANSI mode. | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | CALL sp_vars_check_dflt(); | ||
|  | 
 | ||
|  | CALL sp_vars_check_assignment(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret1(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret2(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret3(); | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret4(); | ||
|  | 
 | ||
|  | SELECT sp_vars_div_zero(); | ||
|  | 
 | ||
|  | # Create the procedure in TRADITIONAL mode. Check that error will be thrown on | ||
|  | # execution. | ||
|  | 
 | ||
|  | DROP PROCEDURE sp_vars_check_dflt; | ||
|  | DROP PROCEDURE sp_vars_check_assignment; | ||
|  | DROP FUNCTION sp_vars_check_ret1; | ||
|  | DROP FUNCTION sp_vars_check_ret2; | ||
|  | DROP FUNCTION sp_vars_check_ret3; | ||
|  | DROP FUNCTION sp_vars_check_ret4; | ||
|  | DROP FUNCTION sp_vars_div_zero; | ||
|  | 
 | ||
|  | --source include/sp-vars.inc | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo Calling the routines, created in TRADITIONAL mode. | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | CALL sp_vars_check_dflt(); | ||
|  | 
 | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | CALL sp_vars_check_assignment(); | ||
|  | 
 | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | SELECT sp_vars_check_ret1(); | ||
|  | 
 | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | SELECT sp_vars_check_ret2(); | ||
|  | 
 | ||
|  | --error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD | ||
|  | SELECT sp_vars_check_ret3(); | ||
|  | 
 | ||
|  | # TODO: Is it an error, that only a warning is emitted here? Check the same | ||
|  | # behaviour with tables. | ||
|  | 
 | ||
|  | SELECT sp_vars_check_ret4(); | ||
|  | 
 | ||
|  | --error ER_DIVISION_BY_ZERO | ||
|  | SELECT sp_vars_div_zero(); | ||
|  | 
 | ||
|  | SET @@sql_mode = 'ansi'; | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE sp_vars_check_dflt; | ||
|  | DROP PROCEDURE sp_vars_check_assignment; | ||
|  | DROP FUNCTION sp_vars_check_ret1; | ||
|  | DROP FUNCTION sp_vars_check_ret2; | ||
|  | DROP FUNCTION sp_vars_check_ret3; | ||
|  | DROP FUNCTION sp_vars_check_ret4; | ||
|  | DROP FUNCTION sp_vars_div_zero; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Tests for BIT data type. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BIT data type tests | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1() | ||
|  | BEGIN | ||
|  |   DECLARE v1 BIT; | ||
|  |   DECLARE v2 BIT(1); | ||
|  |   DECLARE v3 BIT(3) DEFAULT b'101'; | ||
|  |   DECLARE v4 BIT(64) DEFAULT 0x5555555555555555; | ||
|  |   DECLARE v5 BIT(3); | ||
|  |   DECLARE v6 BIT(64); | ||
|  |   DECLARE v7 BIT(8) DEFAULT 128; | ||
|  |   DECLARE v8 BIT(8) DEFAULT '128'; | ||
|  |   DECLARE v9 BIT(8) DEFAULT ' 128'; | ||
|  |   DECLARE v10 BIT(8) DEFAULT 'x 128'; | ||
|  | 
 | ||
|  |   SET v1 = v4; | ||
|  |   SET v2 = 0; | ||
|  |   SET v5 = v4; # check overflow | ||
|  |   SET v6 = v3; # check padding | ||
|  | 
 | ||
|  |   SELECT HEX(v1); | ||
|  |   SELECT HEX(v2); | ||
|  |   SELECT HEX(v3); | ||
|  |   SELECT HEX(v4); | ||
|  |   SELECT HEX(v5); | ||
|  |   SELECT HEX(v6); | ||
|  |   SELECT HEX(v7); | ||
|  |   SELECT HEX(v8); | ||
|  |   SELECT HEX(v9); | ||
|  |   SELECT HEX(v10); | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Tests for CASE statements functionality: | ||
|  | #   - test for general functionality (scopes, nested cases, CASE in loops); | ||
|  | #   - test that if type of the CASE expression is changed on each iteration, | ||
|  | #     the execution will be correct. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo CASE expression tests. | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP PROCEDURE IF EXISTS p2; | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1(log_msg VARCHAR(1024)); | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | 
 | ||
|  | CREATE PROCEDURE p1(arg VARCHAR(255)) | ||
|  | BEGIN | ||
|  |   INSERT INTO t1 VALUES('p1: step1'); | ||
|  | 
 | ||
|  |   CASE arg * 10 | ||
|  |     WHEN 10 * 10 THEN | ||
|  |       INSERT INTO t1 VALUES('p1: case1: on 10'); | ||
|  |     WHEN 10 * 10 + 10 * 10 THEN | ||
|  |       BEGIN | ||
|  |         CASE arg / 10 | ||
|  |           WHEN 1 THEN | ||
|  |             INSERT INTO t1 VALUES('p1: case1: case2: on 1'); | ||
|  |           WHEN 2 THEN | ||
|  |             BEGIN | ||
|  |               DECLARE i TINYINT DEFAULT 10; | ||
|  | 
 | ||
|  |               WHILE i > 0 DO | ||
|  |                 INSERT INTO t1 VALUES(CONCAT('p1: case1: case2: loop: i: ', i)); | ||
|  |                  | ||
|  |                 CASE MOD(i, 2) | ||
|  |                   WHEN 0 THEN | ||
|  |                     INSERT INTO t1 VALUES('p1: case1: case2: loop: i is even'); | ||
|  |                   WHEN 1 THEN | ||
|  |                     INSERT INTO t1 VALUES('p1: case1: case2: loop: i is odd'); | ||
|  |                   ELSE | ||
|  |                     INSERT INTO t1 VALUES('p1: case1: case2: loop: ERROR'); | ||
|  |                 END CASE; | ||
|  |                      | ||
|  |                 SET i = i - 1; | ||
|  |               END WHILE; | ||
|  |             END; | ||
|  |           ELSE | ||
|  |             INSERT INTO t1 VALUES('p1: case1: case2: ERROR'); | ||
|  |         END CASE; | ||
|  | 
 | ||
|  |         CASE arg | ||
|  |           WHEN 10 THEN | ||
|  |             INSERT INTO t1 VALUES('p1: case1: case3: on 10'); | ||
|  |           WHEN 20 THEN | ||
|  |             INSERT INTO t1 VALUES('p1: case1: case3: on 20'); | ||
|  |           ELSE | ||
|  |             INSERT INTO t1 VALUES('p1: case1: case3: ERROR'); | ||
|  |         END CASE; | ||
|  |       END; | ||
|  |     ELSE | ||
|  |       INSERT INTO t1 VALUES('p1: case1: ERROR'); | ||
|  |   END CASE; | ||
|  | 
 | ||
|  |   CASE arg * 10 | ||
|  |     WHEN 10 * 10 THEN | ||
|  |       INSERT INTO t1 VALUES('p1: case4: on 10'); | ||
|  |     WHEN 10 * 10 + 10 * 10 THEN | ||
|  |       BEGIN | ||
|  |         CASE arg / 10 | ||
|  |           WHEN 1 THEN | ||
|  |             INSERT INTO t1 VALUES('p1: case4: case5: on 1'); | ||
|  |           WHEN 2 THEN | ||
|  |             BEGIN | ||
|  |               DECLARE i TINYINT DEFAULT 10; | ||
|  | 
 | ||
|  |               WHILE i > 0 DO | ||
|  |                 INSERT INTO t1 VALUES(CONCAT('p1: case4: case5: loop: i: ', i)); | ||
|  |                  | ||
|  |                 CASE MOD(i, 2) | ||
|  |                   WHEN 0 THEN | ||
|  |                     INSERT INTO t1 VALUES('p1: case4: case5: loop: i is even'); | ||
|  |                   WHEN 1 THEN | ||
|  |                     INSERT INTO t1 VALUES('p1: case4: case5: loop: i is odd'); | ||
|  |                   ELSE | ||
|  |                     INSERT INTO t1 VALUES('p1: case4: case5: loop: ERROR'); | ||
|  |                 END CASE; | ||
|  |                      | ||
|  |                 SET i = i - 1; | ||
|  |               END WHILE; | ||
|  |             END; | ||
|  |           ELSE | ||
|  |             INSERT INTO t1 VALUES('p1: case4: case5: ERROR'); | ||
|  |         END CASE; | ||
|  | 
 | ||
|  |         CASE arg | ||
|  |           WHEN 10 THEN | ||
|  |             INSERT INTO t1 VALUES('p1: case4: case6: on 10'); | ||
|  |           WHEN 20 THEN | ||
|  |             INSERT INTO t1 VALUES('p1: case4: case6: on 20'); | ||
|  |           ELSE | ||
|  |             INSERT INTO t1 VALUES('p1: case4: case6: ERROR'); | ||
|  |         END CASE; | ||
|  |       END; | ||
|  |     ELSE | ||
|  |       INSERT INTO t1 VALUES('p1: case4: ERROR'); | ||
|  |   END CASE; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p2() | ||
|  | BEGIN | ||
|  |   DECLARE i TINYINT DEFAULT 3; | ||
|  | 
 | ||
|  |   WHILE i > 0 DO | ||
|  |     IF MOD(i, 2) = 0 THEN | ||
|  |       SET @_test_session_var = 10; | ||
|  |     ELSE | ||
|  |       SET @_test_session_var = 'test'; | ||
|  |     END IF; | ||
|  | 
 | ||
|  |     CASE @_test_session_var | ||
|  |       WHEN 10 THEN | ||
|  |         INSERT INTO t1 VALUES('p2: case: numerical type'); | ||
|  |       WHEN 'test' THEN | ||
|  |         INSERT INTO t1 VALUES('p2: case: string type'); | ||
|  |       ELSE | ||
|  |         INSERT INTO t1 VALUES('p2: case: ERROR'); | ||
|  |     END CASE; | ||
|  | 
 | ||
|  |     SET i = i - 1; | ||
|  |   END WHILE; | ||
|  | END| | ||
|  | 
 | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(10); | ||
|  | CALL p1(20); | ||
|  | 
 | ||
|  | CALL p2(); | ||
|  | 
 | ||
|  | SELECT * FROM t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP PROCEDURE p2; | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#14161: Stored procedure cannot retrieve bigint unsigned. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#14161 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1(col BIGINT UNSIGNED); | ||
|  | 
 | ||
|  | INSERT INTO t1 VALUE(18446744073709551614); | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1(IN arg BIGINT UNSIGNED) | ||
|  | BEGIN | ||
|  |   SELECT arg; | ||
|  |   SELECT * FROM t1; | ||
|  |   SELECT * FROM t1 WHERE col = arg; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(18446744073709551614); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | DROP PROCEDURE p1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#13705: parameters to stored procedures are not verified. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#13705 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1(x VARCHAR(10), y CHAR(3)) READS SQL DATA | ||
|  | BEGIN | ||
|  |   SELECT x, y; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1('alpha', 'abc'); | ||
|  | CALL p1('alpha', 'abcdef'); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#13675: DATETIME/DATE type in store proc param seems to be | ||
|  | # converted as varbinary. | ||
|  | # | ||
|  | # TODO: test case failed. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#13675 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1(x DATETIME) | ||
|  | BEGIN | ||
|  |   CREATE TABLE t1 SELECT x; | ||
|  |   SHOW CREATE TABLE t1; | ||
|  |   DROP TABLE t1; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(NOW()); | ||
|  | 
 | ||
|  | CALL p1('test'); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#12976: Boolean values reversed in stored procedures? | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#12976 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP PROCEDURE IF EXISTS p2; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1(b BIT(1)); | ||
|  | 
 | ||
|  | INSERT INTO t1(b) VALUES(b'0'), (b'1'); | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1() | ||
|  | BEGIN | ||
|  |   SELECT HEX(b), | ||
|  |     b = 0, | ||
|  |     b = FALSE, | ||
|  |     b IS FALSE, | ||
|  |     b = 1, | ||
|  |     b = TRUE, | ||
|  |     b IS TRUE | ||
|  |   FROM t1; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p2() | ||
|  | BEGIN | ||
|  |   DECLARE vb BIT(1); | ||
|  |   SELECT b INTO vb FROM t1 WHERE b = 0; | ||
|  | 
 | ||
|  |   SELECT HEX(vb), | ||
|  |     vb = 0, | ||
|  |     vb = FALSE, | ||
|  |     vb IS FALSE, | ||
|  |     vb = 1, | ||
|  |     vb = TRUE, | ||
|  |     vb IS TRUE; | ||
|  | 
 | ||
|  |   SELECT b INTO vb FROM t1 WHERE b = 1; | ||
|  | 
 | ||
|  |   SELECT HEX(vb), | ||
|  |     vb = 0, | ||
|  |     vb = FALSE, | ||
|  |     vb IS FALSE, | ||
|  |     vb = 1, | ||
|  |     vb = TRUE, | ||
|  |     vb IS TRUE; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | call p1(); | ||
|  | 
 | ||
|  | call p2(); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP PROCEDURE p2; | ||
|  | 
 | ||
|  | # Additional tests for Bug#12976 | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS table_12976_a; | ||
|  | DROP TABLE IF EXISTS table_12976_b; | ||
|  | DROP PROCEDURE IF EXISTS proc_12976_a; | ||
|  | DROP PROCEDURE IF EXISTS proc_12976_b; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | CREATE TABLE table_12976_a (val bit(1)); | ||
|  | 
 | ||
|  | CREATE TABLE table_12976_b( | ||
|  |   appname varchar(15), | ||
|  |   emailperm bit not null default 1, | ||
|  |   phoneperm bit not null default 0); | ||
|  | 
 | ||
|  | insert into table_12976_b values ('A', b'1', b'1'), ('B', b'0', b'0'); | ||
|  | 
 | ||
|  | delimiter ||; | ||
|  | CREATE PROCEDURE proc_12976_a() | ||
|  | BEGIN | ||
|  |   declare localvar bit(1); | ||
|  |   SELECT val INTO localvar FROM table_12976_a; | ||
|  |   SELECT coalesce(localvar, 1)+1, coalesce(val, 1)+1 FROM table_12976_a; | ||
|  | END|| | ||
|  | 
 | ||
|  | CREATE PROCEDURE proc_12976_b( | ||
|  |   name varchar(15), | ||
|  |   out ep bit, | ||
|  |   out msg varchar(10)) | ||
|  | BEGIN | ||
|  |   SELECT emailperm into ep FROM table_12976_b where (appname = name); | ||
|  |   IF ep is true THEN | ||
|  |     SET msg = 'True'; | ||
|  |   ELSE | ||
|  |     SET msg = 'False'; | ||
|  |   END IF; | ||
|  | END|| | ||
|  | 
 | ||
|  | delimiter ;|| | ||
|  | 
 | ||
|  | INSERT table_12976_a VALUES (0); | ||
|  | call proc_12976_a(); | ||
|  | UPDATE table_12976_a set val=1; | ||
|  | call proc_12976_a(); | ||
|  | 
 | ||
|  | call proc_12976_b('A', @ep, @msg); | ||
|  | select @ep, @msg; | ||
|  | 
 | ||
|  | call proc_12976_b('B', @ep, @msg); | ||
|  | select @ep, @msg; | ||
|  | 
 | ||
|  | DROP TABLE table_12976_a; | ||
|  | DROP TABLE table_12976_b; | ||
|  | DROP PROCEDURE proc_12976_a; | ||
|  | DROP PROCEDURE proc_12976_b; | ||
|  | 
 | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#9572: Stored procedures: variable type declarations | ||
|  | # ignored. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#9572 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP PROCEDURE IF EXISTS p2; | ||
|  | DROP PROCEDURE IF EXISTS p3; | ||
|  | 
 | ||
|  | DROP PROCEDURE IF EXISTS p4; | ||
|  | DROP PROCEDURE IF EXISTS p5; | ||
|  | DROP PROCEDURE IF EXISTS p6; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | SET @@sql_mode = 'traditional'; | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | 
 | ||
|  | CREATE PROCEDURE p1() | ||
|  | BEGIN | ||
|  |   DECLARE v TINYINT DEFAULT 1e200; | ||
|  |   SELECT v; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p2() | ||
|  | BEGIN | ||
|  |   DECLARE v DECIMAL(5) DEFAULT 1e200; | ||
|  |   SELECT v; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p3() | ||
|  | BEGIN | ||
|  |   DECLARE v CHAR(5) DEFAULT 'abcdef'; | ||
|  |   SELECT v LIKE 'abc___'; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p4(arg VARCHAR(2)) | ||
|  | BEGIN | ||
|  |     DECLARE var VARCHAR(1); | ||
|  |     SET var := arg; | ||
|  |     SELECT arg, var; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p5(arg CHAR(2)) | ||
|  | BEGIN | ||
|  |     DECLARE var CHAR(1); | ||
|  |     SET var := arg; | ||
|  |     SELECT arg, var; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p6(arg DECIMAL(2)) | ||
|  | BEGIN | ||
|  |     DECLARE var DECIMAL(1); | ||
|  |     SET var := arg; | ||
|  |     SELECT arg, var; | ||
|  | END| | ||
|  | 
 | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | CALL p1(); | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | CALL p2(); | ||
|  | --error ER_DATA_TOO_LONG | ||
|  | CALL p3(); | ||
|  | 
 | ||
|  | --error ER_DATA_TOO_LONG | ||
|  | CALL p4('aaa');  | ||
|  | --error ER_DATA_TOO_LONG | ||
|  | CALL p5('aa'); | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | CALL p6(10); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | SET @@sql_mode = 'ansi'; | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP PROCEDURE p2; | ||
|  | DROP PROCEDURE p3; | ||
|  | 
 | ||
|  | DROP PROCEDURE p4; | ||
|  | DROP PROCEDURE p5; | ||
|  | DROP PROCEDURE p6; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#9078: STORED PROCDURE: Decimal digits are not displayed | ||
|  | # when we use DECIMAL datatype. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#9078 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1 (arg DECIMAL(64,2)) | ||
|  | BEGIN | ||
|  |   DECLARE var DECIMAL(64,2); | ||
|  | 
 | ||
|  |   SET var = arg; | ||
|  |   SELECT var; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(1929); | ||
|  | CALL p1(1929.00); | ||
|  | CALL p1(1929.003); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#8768: Functions: For any unsigned data type, -ve values can | ||
|  | # be passed and returned. | ||
|  | # | ||
|  | # TODO: there is a bug here -- the function created in ANSI mode should not | ||
|  | # throw errors instead of warnings if called in TRADITIONAL mode. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#8768 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP FUNCTION IF EXISTS f1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | # Create a function in ANSI mode. | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE FUNCTION f1(arg TINYINT UNSIGNED) RETURNS TINYINT | ||
|  | BEGIN | ||
|  |   RETURN arg; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | SELECT f1(-2500); | ||
|  | 
 | ||
|  | # Call in TRADITIONAL mode the function created in ANSI mode. | ||
|  | 
 | ||
|  | SET @@sql_mode = 'traditional'; | ||
|  | 
 | ||
|  | # TODO: a warning should be emitted here. | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | SELECT f1(-2500); | ||
|  | 
 | ||
|  | # Recreate the function in TRADITIONAL mode. | ||
|  | 
 | ||
|  | DROP FUNCTION f1; | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE FUNCTION f1(arg TINYINT UNSIGNED) RETURNS TINYINT | ||
|  | BEGIN | ||
|  |   RETURN arg; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | SELECT f1(-2500); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | SET @@sql_mode = 'ansi'; | ||
|  | 
 | ||
|  | DROP FUNCTION f1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#8769: Functions: For Int datatypes, out of range values can | ||
|  | # be passed and returned. | ||
|  | # | ||
|  | # TODO: there is a bug here -- the function created in ANSI mode should not | ||
|  | # throw errors instead of warnings if called in TRADITIONAL mode. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#8769 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP FUNCTION IF EXISTS f1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | # Create a function in ANSI mode. | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE FUNCTION f1(arg MEDIUMINT) RETURNS MEDIUMINT | ||
|  | BEGIN | ||
|  |   RETURN arg; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | SELECT f1(8388699); | ||
|  | 
 | ||
|  | # Call in TRADITIONAL mode the function created in ANSI mode. | ||
|  | 
 | ||
|  | SET @@sql_mode = 'traditional'; | ||
|  | 
 | ||
|  | # TODO: a warning should be emitted here. | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | SELECT f1(8388699); | ||
|  | 
 | ||
|  | # Recreate the function in TRADITIONAL mode. | ||
|  | 
 | ||
|  | DROP FUNCTION f1; | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE FUNCTION f1(arg MEDIUMINT) RETURNS MEDIUMINT | ||
|  | BEGIN | ||
|  |   RETURN arg; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | --error ER_WARN_DATA_OUT_OF_RANGE | ||
|  | SELECT f1(8388699); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | SET @@sql_mode = 'ansi'; | ||
|  | 
 | ||
|  | DROP FUNCTION f1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#8702: Stored Procedures: No Error/Warning shown for | ||
|  | # inappropriate data type matching. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#8702 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1(col VARCHAR(255)); | ||
|  | 
 | ||
|  | INSERT INTO t1(col) VALUES('Hello, world!'); | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1() | ||
|  | BEGIN | ||
|  |   DECLARE sp_var INTEGER; | ||
|  | 
 | ||
|  |   SELECT col INTO sp_var FROM t1 LIMIT 1; | ||
|  |   SET @user_var = sp_var; | ||
|  | 
 | ||
|  |   SELECT sp_var; | ||
|  |   SELECT @user_var; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#12903: upper function does not work inside a function. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#12903 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP FUNCTION IF EXISTS f1; | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1(txt VARCHAR(255)); | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE FUNCTION f1(arg VARCHAR(255)) RETURNS VARCHAR(255) | ||
|  | BEGIN | ||
|  |   DECLARE v1 VARCHAR(255); | ||
|  |   DECLARE v2 VARCHAR(255); | ||
|  | 
 | ||
|  |   SET v1 = CONCAT(LOWER(arg), UPPER(arg)); | ||
|  |   SET v2 = CONCAT(LOWER(v1), UPPER(v1)); | ||
|  | 
 | ||
|  |   INSERT INTO t1 VALUES(v1), (v2); | ||
|  | 
 | ||
|  |   RETURN CONCAT(LOWER(arg), UPPER(arg)); | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | SELECT f1('_aBcDe_'); | ||
|  | 
 | ||
|  | SELECT * FROM t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP FUNCTION f1; | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#13808: ENUM type stored procedure parameter accepts | ||
|  | # non-enumerated data. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#13808 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP PROCEDURE IF EXISTS p2; | ||
|  | DROP FUNCTION IF EXISTS f1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | 
 | ||
|  | CREATE PROCEDURE p1(arg ENUM('a', 'b')) | ||
|  | BEGIN | ||
|  |   SELECT arg; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p2(arg ENUM('a', 'b')) | ||
|  | BEGIN | ||
|  |   DECLARE var ENUM('c', 'd') DEFAULT arg; | ||
|  | 
 | ||
|  |   SELECT arg, var; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE FUNCTION f1(arg ENUM('a', 'b')) RETURNS ENUM('c', 'd') | ||
|  | BEGIN | ||
|  |   RETURN arg; | ||
|  | END| | ||
|  | 
 | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1('c'); | ||
|  | 
 | ||
|  | CALL p2('a'); | ||
|  | 
 | ||
|  | SELECT f1('a'); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP PROCEDURE p2; | ||
|  | DROP FUNCTION f1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#13909: Varchar Stored Procedure Parameter always BINARY | ||
|  | # string (ignores CHARACTER SET). | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#13909 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP PROCEDURE IF EXISTS p2; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | 
 | ||
|  | CREATE PROCEDURE p1(arg VARCHAR(255)) | ||
|  | BEGIN | ||
|  |   SELECT CHARSET(arg); | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE p2(arg VARCHAR(255) CHARACTER SET UTF8) | ||
|  | BEGIN | ||
|  |     SELECT CHARSET(arg); | ||
|  | END| | ||
|  | 
 | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1('t'); | ||
|  | CALL p1(_UTF8 't'); | ||
|  | 
 | ||
|  | 
 | ||
|  | CALL p2('t'); | ||
|  | CALL p2(_LATIN1 't'); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP PROCEDURE p2; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#14188: BINARY variables have no 0x00 padding. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#14188 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1(arg1 BINARY(2), arg2 VARBINARY(2)) | ||
|  | BEGIN | ||
|  |   DECLARE var1 BINARY(2) DEFAULT 0x41; | ||
|  |   DECLARE var2 VARBINARY(2) DEFAULT 0x42; | ||
|  | 
 | ||
|  |   SELECT HEX(arg1), HEX(arg2); | ||
|  |   SELECT HEX(var1), HEX(var2); | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(0x41, 0x42); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#15148: Stored procedure variables accept non-scalar values. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#15148 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1(col1 TINYINT, col2 TINYINT); | ||
|  | 
 | ||
|  | INSERT INTO t1 VALUES(1, 2), (11, 12); | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1(arg TINYINT) | ||
|  | BEGIN | ||
|  |   SELECT arg; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | --error ER_OPERAND_COLUMNS | ||
|  | CALL p1((1, 2)); | ||
|  | 
 | ||
|  | --error ER_OPERAND_COLUMNS | ||
|  | CALL p1((SELECT * FROM t1 LIMIT 1)); | ||
|  | 
 | ||
|  | --error ER_OPERAND_COLUMNS | ||
|  | CALL p1((SELECT col1, col2 FROM t1 LIMIT 1)); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#13613: substring function in stored procedure. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#13613 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | DROP FUNCTION IF EXISTS f1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | 
 | ||
|  | CREATE PROCEDURE p1(x VARCHAR(50)) | ||
|  | BEGIN | ||
|  |   SET x = SUBSTRING(x, 1, 3); | ||
|  |   SELECT x; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE FUNCTION f1(x VARCHAR(50)) RETURNS VARCHAR(50) | ||
|  | BEGIN | ||
|  |   RETURN SUBSTRING(x, 1, 3); | ||
|  | END| | ||
|  | 
 | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1('abcdef'); | ||
|  | 
 | ||
|  | SELECT f1('ABCDEF'); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | DROP FUNCTION f1; | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | # | ||
|  | # Test case for BUG#13665: concat with '' produce incorrect results in SP. | ||
|  | # | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo BUG#13665 | ||
|  | --echo --------------------------------------------------------------- | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Prepare. | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP FUNCTION IF EXISTS f1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # | ||
|  | # Test case. | ||
|  | # | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE FUNCTION f1() RETURNS VARCHAR(20000) | ||
|  | BEGIN | ||
|  |   DECLARE var VARCHAR(2000); | ||
|  | 
 | ||
|  |   SET var = ''; | ||
|  |   SET var = CONCAT(var, 'abc'); | ||
|  |   SET var = CONCAT(var, ''); | ||
|  | 
 | ||
|  |   RETURN var; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | SELECT f1(); | ||
|  | 
 | ||
|  | # | ||
|  | # Cleanup. | ||
|  | # | ||
|  | 
 | ||
|  | DROP FUNCTION f1; | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#17226: Variable set in cursor on first iteration is assigned | ||
|  | # second iterations value | ||
|  | # | ||
|  | # The problem was in incorrect handling of local variables of type | ||
|  | # TEXT (BLOB). | ||
|  | # | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS p1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | CREATE PROCEDURE p1() | ||
|  | BEGIN | ||
|  |   DECLARE v_char VARCHAR(255); | ||
|  |   DECLARE v_text TEXT DEFAULT ''; | ||
|  | 
 | ||
|  |   SET v_char = 'abc'; | ||
|  | 
 | ||
|  |   SET v_text = v_char; | ||
|  | 
 | ||
|  |   SET v_char = 'def'; | ||
|  | 
 | ||
|  |   SET v_text = concat(v_text, '|', v_char); | ||
|  | 
 | ||
|  |   SELECT v_text; | ||
|  | END| | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | CALL p1(); | ||
|  | 
 | ||
|  | DROP PROCEDURE p1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #27415 Text Variables in stored procedures | ||
|  | # If the SP varible was also referenced on the right side | ||
|  | # the result was corrupted. | ||
|  | # | ||
|  | DELIMITER |; | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP PROCEDURE IF EXISTS bug27415_text_test| | ||
|  | DROP PROCEDURE IF EXISTS bug27415_text_test2| | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | CREATE PROCEDURE bug27415_text_test(entity_id_str_in text) | ||
|  | BEGIN | ||
|  |     DECLARE str_remainder text; | ||
|  | 
 | ||
|  |     SET str_remainder = entity_id_str_in; | ||
|  | 
 | ||
|  |     select 'before substr', str_remainder; | ||
|  |     SET str_remainder = SUBSTRING(str_remainder, 3); | ||
|  |     select 'after substr', str_remainder; | ||
|  | END| | ||
|  | 
 | ||
|  | CREATE PROCEDURE bug27415_text_test2(entity_id_str_in text) | ||
|  | BEGIN | ||
|  |     DECLARE str_remainder text; | ||
|  |     DECLARE str_remainder2 text; | ||
|  |   | ||
|  |     SET str_remainder2 = entity_id_str_in; | ||
|  |     select 'before substr', str_remainder2; | ||
|  |     SET str_remainder = SUBSTRING(str_remainder2, 3); | ||
|  |     select 'after substr', str_remainder; | ||
|  | END| | ||
|  | 
 | ||
|  | CALL bug27415_text_test('a,b,c')| | ||
|  | CALL bug27415_text_test('a,b,c')| | ||
|  | CALL bug27415_text_test2('a,b,c')| | ||
|  | CALL bug27415_text_test('a,b,c')| | ||
|  | 
 | ||
|  | DROP PROCEDURE bug27415_text_test| | ||
|  | DROP PROCEDURE bug27415_text_test2| | ||
|  | 
 | ||
|  | DELIMITER ;| | ||
|  | 
 | ||
|  | # End of 5.0 tests. | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #26277 User variable returns one type in SELECT @v and other for CREATE as SELECT @v | ||
|  | # | ||
|  | --disable_warnings | ||
|  | drop function if exists f1; | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | delimiter |; | ||
|  | create function f1() returns int  | ||
|  | begin | ||
|  |  if @a=1 then set @b='abc'; | ||
|  |  else set @b=1; | ||
|  |  end if; | ||
|  |  set @a=1; | ||
|  |  return 0; | ||
|  | end| | ||
|  | 
 | ||
|  | create table t1 (a int)| | ||
|  | insert into t1 (a) values (1), (2)| | ||
|  | 
 | ||
|  | set @b=1| | ||
|  | set @a=0| | ||
|  | select f1(), @b from t1| | ||
|  | 
 | ||
|  | set @b:='test'| | ||
|  | set @a=0| | ||
|  | select f1(), @b from t1| | ||
|  | 
 | ||
|  | delimiter ;| | ||
|  | 
 | ||
|  | drop function f1; | ||
|  | drop table t1; | ||
|  | # End of 5.1 tests. | ||
|  | 
 |