sp-vars.test
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· TEST 代码 · 共 1,415 行 · 第 1/2 页
TEST
1,415 行
############################################################################# 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 -----------------------------------------------------------------echoCALL 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 -----------------------------------------------------------------echoCALL 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_RANGECALL sp_vars_check_dflt();--error ER_WARN_DATA_OUT_OF_RANGECALL sp_vars_check_assignment();--error ER_WARN_DATA_OUT_OF_RANGESELECT sp_vars_check_ret1();--error ER_WARN_DATA_OUT_OF_RANGESELECT sp_vars_check_ret2();--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELDSELECT 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_ZEROSELECT 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_warningsDROP 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_warningsDROP 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_warningsDROP PROCEDURE IF EXISTS p1;--enable_warnings## Test case.#delimiter |;CREATE PROCEDURE p1(x VARCHAR(10), y CHAR(3)) READS SQL DATABEGIN 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_warningsDROP 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_warningsDROP 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_warningsDROP 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_warningsCREATE 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_warningsDROP 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;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?