diff options
Diffstat (limited to 'mysql-test/t/sp.test')
-rw-r--r-- | mysql-test/t/sp.test | 124 |
1 files changed, 116 insertions, 8 deletions
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 58bffab462d..e95d4ae2ac7 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -6273,7 +6273,7 @@ DROP FUNCTION IF EXISTS bug16899_f1| --enable_warnings --error ER_WRONG_STRING_LENGTH -CREATE DEFINER=1234567890abcdefGHIKL@localhost PROCEDURE bug16899_p1() +CREATE DEFINER=longer_than_80_456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789@localhost PROCEDURE bug16899_p1() BEGIN SET @a = 1; END| @@ -7394,7 +7394,7 @@ begin /*! select 2; */ select 3; /*!00000 select 4; */ - /*!99999 select 5; */ + /*!999999 select 5; */ end $$ @@ -7402,7 +7402,7 @@ create procedure proc_25411_b( /* real comment */ /*! p1 int, */ /*!00000 p2 int */ -/*!99999 ,p3 int */ +/*!999999 ,p3 int */ ) begin select p1, p2; @@ -7411,11 +7411,11 @@ $$ create procedure proc_25411_c() begin - select 1/*!,2*//*!00000,3*//*!99999,4*/; - select 1/*! ,2*//*!00000 ,3*//*!99999 ,4*/; - select 1/*!,2 *//*!00000,3 *//*!99999,4 */; - select 1/*! ,2 *//*!00000 ,3 *//*!99999 ,4 */; - select 1 /*!,2*/ /*!00000,3*/ /*!99999,4*/ ; + select 1/*!,2*//*!00000,3*//*!999999,4*/; + select 1/*! ,2*//*!00000 ,3*//*!999999 ,4*/; + select 1/*!,2 *//*!00000,3 *//*!999999,4 */; + select 1/*! ,2 *//*!00000 ,3 *//*!999999 ,4 */; + select 1 /*!,2*/ /*!00000,3*/ /*!999999,4*/ ; end $$ @@ -9426,3 +9426,111 @@ CREATE PROCEDURE sp() SHOW USER_STATISTICS; CALL sp; SELECT 1; DROP PROCEDURE sp; + +--echo # +--echo # MDEV-7040: Crash in field_conv, memcpy_field_possible, part#2 +--echo # +create table t1 ( + col1 bigint(20), + col2 char(1), + col3 char(2) +); +insert into t1 values (1,'a','a'), (2,'b','b'); + +create table t2 as select * from t1; +create table t3 as select * from t1; +create table t4 as select * from t1; +create table t5 as select * from t1; +create table t6 as select * from t1; + +flush tables; + +DELIMITER |; + +CREATE PROCEDURE p1() +begin + DECLARE _var1 bigint(20) UNSIGNED; + DECLARE _var2 CHAR(1) DEFAULT NULL; + DECLARE _var3 CHAR(1) DEFAULT NULL; + + DECLARE _done BOOLEAN DEFAULT 0; + + declare cur1 cursor for + select col1, col2, col3 + from t1 + where + col1 in (select t2.col1 from t2 where t2.col2=t1.col2) or + col2 in (select t3.col3 from t3 where t3.col3=t1.col2) ; + + DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1; + + OPEN cur1; + + set _var1 = (select _var1 from t4 limit 1); + set _var1 = (select _var1 from t5 limit 1); + set _var1 = (select _var1 from t6 limit 1); +label1: + LOOP + SET _done = 0; + FETCH cur1 INTO _var1, _var2, _var3; + IF _done THEN + LEAVE label1; + END IF; + END LOOP label1; + CLOSE cur1; +end| +DELIMITER ;| + +set @tmp_toc= @@table_open_cache; +set @tmp_tdc= @@table_definition_cache; + +set global table_open_cache=1; +set global table_definition_cache=1; +call p1(); + +set global table_open_cache= @tmp_toc; +set global table_definition_cache= @tmp_tdc; +drop procedure p1; + +drop table t1,t2,t3,t4,t5,t6; + +--echo # +--echo # MDEV-11935: Queries in stored procedures with and +--echo # EXISTS(SELECT * FROM VIEW) crashes and closes hte conneciton. +--echo # + +CREATE TABLE ANY_TABLE ( + ENTITY_UID BIGINT NOT NULL +); +CREATE TABLE SECURITY_PATH( +origid BIGINT UNSIGNED NOT NULL, +destid BIGINT UNSIGNED NOT NULL, +KEY (destid) +); +CREATE VIEW ENTITY_ACCESS ( +ENTITY_UID, +OWNER_UID +) AS +SELECT SP1.origid, + SP2.destid +FROM SECURITY_PATH SP1 +JOIN SECURITY_PATH SP2 ON SP1.destid = SP2.origid +; +--delimiter // +CREATE PROCEDURE SP_EXAMPLE_SELECT () +BEGIN + SELECT * + FROM ANY_TABLE AT1 + WHERE EXISTS ( SELECT * + FROM ENTITY_ACCESS EA + WHERE AT1.ENTITY_UID = EA.ENTITY_UID + AND EA.OWNER_UID IS NULL ); +END +// +--delimiter ; +CALL SP_EXAMPLE_SELECT (); +CALL SP_EXAMPLE_SELECT (); + +drop procedure SP_EXAMPLE_SELECT; +drop view ENTITY_ACCESS; +drop table ANY_TABLE, SECURITY_PATH; |