Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/MariaDB/mysql-test/main/   (MariaDB Server Version 8.1-8.4©)  Datei vom 1.9.2026 mit Größe 10 kB image not shown  

Quelle  sp-bugs.test  Sprache: unbekannt

 
Spracherkennung für: .test vermutete Sprache: SQL {SQL[95] ADA[57] VHDL[57]} [Methode: maximale Elemente, drei Dimensionen]

# Test file for stored procedure bugfixes

--echo #
--echo # Bug #47412: Valgrind warnings / user can read uninitialized memory
--echo # using SP variables
--echo #

CREATE SCHEMA testdb;
USE testdb;
DELIMITER |;
CREATE FUNCTION f2 () RETURNS INTEGER
BEGIN
   DECLARE CONTINUE HANDLER FOR SQLSTATE '42000' SET @aux = 1;
   RETURN f_not_exists () ;
END|
CREATE PROCEDURE p3 ( arg1 VARCHAR(32) )
BEGIN
   CALL p_not_exists ( );
END|
DELIMITER ;|
--echo # should not return valgrind warnings
--error ER_SP_DOES_NOT_EXIST
CALL p3 ( f2 () );

DROP SCHEMA testdb;

CREATE SCHEMA testdb;
USE testdb;
DELIMITER |;
CREATE FUNCTION f2 () RETURNS INTEGER
BEGIN
   DECLARE CONTINUE HANDLER FOR SQLSTATE '42000' SET @aux = 1;
   RETURN f_not_exists () ;
END|
CREATE PROCEDURE p3 ( arg2 INTEGER )
BEGIN
   CALL p_not_exists ( );
END|
DELIMITER ;|
--echo # should not return valgrind warnings
--error ER_SP_DOES_NOT_EXIST
CALL p3 ( f2 () );

DROP SCHEMA testdb;

CREATE SCHEMA testdb;
USE testdb;
DELIMITER |;
CREATE FUNCTION f2 () RETURNS INTEGER
BEGIN
   DECLARE CONTINUE HANDLER FOR SQLSTATE '42000' SET @aux = 1;
   RETURN f_not_exists () ;
END|
DELIMITER ;|
--echo # should not return valgrind warnings
SELECT f2 ();

DROP SCHEMA testdb;

USE test;

--echo #
--echo # Bug#50423: Crash on second call of a procedure dropping a trigger
--echo #

--disable_warnings
DROP TABLE IF EXISTS t1;
DROP TRIGGER IF EXISTS tr1;
DROP PROCEDURE IF EXISTS p1;
--enable_warnings

CREATE TABLE t1 (f1 INTEGER);
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW SET @aux = 1;
CREATE PROCEDURE p1 () DROP TRIGGER tr1;

CALL p1 ();
--error ER_TRG_DOES_NOT_EXIST
CALL p1 ();

DROP TABLE t1;
DROP PROCEDURE p1;

--echo #
--echo # Bug#54375: Error in stored procedure leaves connection
--echo # in different default schema
--echo #

--disable_warnings
SET @@SQL_MODE = 'STRICT_ALL_TABLES';
DROP DATABASE IF EXISTS db1;
CREATE DATABASE db1;
USE db1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (c1 int NOT NULL PRIMARY KEY);
INSERT INTO t1 VALUES (1);
DELIMITER $$;
CREATE FUNCTION f1 (
 some_value int
)
RETURNS smallint
DETERMINISTIC
BEGIN
 INSERT INTO t1 SET c1 = some_value;
        RETURN(LAST_INSERT_ID());
END$$
DELIMITER ;$$
DROP DATABASE IF EXISTS db2;
CREATE DATABASE db2;
--enable_warnings
USE db2;
SELECT DATABASE();
--error ER_DUP_ENTRY
SELECT db1.f1(1);
SELECT DATABASE();
USE test;
DROP FUNCTION db1.f1;
DROP TABLE db1.t1;
DROP DATABASE db1;
DROP DATABASE db2;
USE test;

--echo #
--echo # Bug#13105873:valgrind warning:possible crash in foreign 
--echo # key handling on subsequent create table if not exists 
--echo #

--disable_warnings
DROP DATABASE IF EXISTS testdb;
--enable_warnings
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE t1 (id1 INT PRIMARY KEY);
DELIMITER $;
CREATE PROCEDURE `p1`()
BEGIN
    CREATE TABLE IF NOT EXISTS t2(id INT PRIMARY KEY,
    CONSTRAINT FK FOREIGN KEY (id) REFERENCES t1( id1 ));
END$
DELIMITER ;$
CALL p1();
--echo # below stmt should not return valgrind warnings
CALL p1(); 
DROP DATABASE testdb;
USE test;

--echo #
--echo # End of 5.1 tests
--echo #

--echo #
--echo # BUG#13489996 valgrind:conditional jump or move depends on
--echo # uninitialised values-field_blob
--echo #

CREATE FUNCTION sf() RETURNS BLOB RETURN "";
SELECT sf();
DROP FUNCTION sf;

--echo #
--echo # Bug#11763507 - 56224: FUNCTION NAME IS CASE-SENSITIVE
--echo #
SET @@SQL_MODE = '';
DELIMITER $;
CREATE FUNCTION testf_bug11763507() RETURNS INT
BEGIN
    RETURN 0;
END
$

CREATE PROCEDURE testp_bug11763507()
BEGIN
    SELECT "PROCEDURE testp_bug11763507";
END
$

DELIMITER ;$

# STORED FUNCTIONS
SELECT testf_bug11763507();
SELECT TESTF_bug11763507();

--replace_column 5 # 6 #
SHOW FUNCTION STATUS LIKE  'testf_bug11763507';
--replace_column 5 # 6 #
SHOW FUNCTION STATUS WHERE NAME='testf_bug11763507';
--replace_column 5 # 6 #
SHOW FUNCTION STATUS LIKE  'TESTF_bug11763507';
--replace_column 5 # 6 #
SHOW FUNCTION STATUS WHERE NAME='TESTF_bug11763507';

SHOW CREATE FUNCTION testf_bug11763507;
SHOW CREATE FUNCTION TESTF_bug11763507;

# STORED PROCEDURE
CALL testp_bug11763507();
CALL TESTP_bug11763507();

--replace_column 5 # 6 #
SHOW PROCEDURE STATUS LIKE  'testp_bug11763507';
--replace_column 5 # 6 #
SHOW PROCEDURE STATUS WHERE NAME='testp_bug11763507';
--replace_column 5 # 6 #
SHOW PROCEDURE STATUS LIKE  'TESTP_bug11763507';
--replace_column 5 # 6 #
SHOW PROCEDURE STATUS WHERE NAME='TESTP_bug11763507';

SHOW CREATE PROCEDURE testp_bug11763507;
SHOW CREATE PROCEDURE TESTP_bug11763507;

# INFORMATION SCHEMA 
SELECT specific_name FROM INFORMATION_SCHEMA.ROUTINES WHERE specific_name LIKE 'testf_bug11763507';
SELECT specific_name FROM INFORMATION_SCHEMA.ROUTINES WHERE specific_name LIKE 'TESTF_bug11763507';

SELECT specific_name FROM INFORMATION_SCHEMA.ROUTINES WHERE specific_name='testf_bug11763507';
SELECT specific_name FROM INFORMATION_SCHEMA.ROUTINES WHERE specific_name='TESTF_bug11763507';

DROP PROCEDURE testp_bug11763507;
DROP FUNCTION testf_bug11763507;

--echo #END OF BUG#11763507 test.

--echo #
--echo # MDEV-5531 double call procedure in one session
--echo #

CREATE TABLE  `t1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_ts` int(10) unsigned DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

DELIMITER $$;

CREATE PROCEDURE test_5531 (IN step TINYINT(1))
BEGIN
  DECLARE counts INT DEFAULT 0;
  DECLARE cur1 CURSOR FOR

  SELECT ct.id
  FROM (SELECT NULL) AS z
  JOIN (
    SELECT id
    FROM `t1`
    LIMIT 10
  ) AS ct
  JOIN (SELECT NULL) AS x ON(
    EXISTS(
      SELECT 1
      FROM `t1`
      WHERE id=ct.id
      LIMIT 1
    )
  );

  IF step=1 THEN
    TRUNCATE t1;
    REPEAT
      INSERT INTO `t1`
      (create_ts) VALUES
      (UNIX_TIMESTAMP());

      SET counts=counts+1;
    UNTIL counts>150 END REPEAT;

    SET max_sp_recursion_depth=1;

    CALL test_5531(2);
    SET max_sp_recursion_depth=2;
    CALL test_5531(2);
  ELSEIF step=2 THEN
    OPEN cur1; CLOSE cur1;
  END IF;
END $$
DELIMITER ;$$
CALL test_5531(1);
DROP PROCEDURE test_5531;
DROP TABLE t1;

#
# MDEV-6601 Assertion `!thd->in_active_multi_stmt_transa ction() || thd->in_multi_stmt_transaction_mode()' failed on executing a stored procedure with commit
#
delimiter |;
create procedure sp() begin
  commit;
end|
delimiter ;|
start transaction;
call sp();
drop procedure sp;

--echo #
--echo # MDEV-11146 SP variables of the SET data type erroneously allow values with comma
--echo #

DELIMITER $$;
--error ER_ILLEGAL_VALUE_FOR_TYPE
CREATE PROCEDURE p1()
BEGIN
  DECLARE a SET('a','b','c','a,b');
  SET a='a,b';
  SELECT a, a+0;
END;
$$
DELIMITER ;$$


--echo #
--echo # Start of 10.3 tests
--echo #

--echo #
--echo # MDEV-16117 SP with a single FOR statement creates but further fails to load
--echo #

DELIMITER $$;
CREATE PROCEDURE p1()
  FOR i IN 1..10 DO
      set @x = 5;
  END FOR;
$$
DELIMITER ;$$
CALL p1;
SELECT body FROM mysql.proc WHERE db='test' AND specific_name='p1';
DROP PROCEDURE p1;


DELIMITER $$;
CREATE PROCEDURE p1() WITH t1 AS (SELECT 1) SELECT 1;
$$
DELIMITER ;$$
CALL p1;
SELECT body FROM mysql.proc WHERE db='test' AND specific_name='p1';
DROP PROCEDURE p1;


DELIMITER $$;
CREATE PROCEDURE p1() VALUES (1);
$$
DELIMITER ;$$
CALL p1;
SELECT body FROM mysql.proc WHERE db='test' AND specific_name='p1';
DROP PROCEDURE p1;


DELIMITER $$;
CREATE FUNCTION f1() RETURNS INT
  FOR i IN 1..10 DO
    RETURN 1;
  END FOR;
$$
DELIMITER ;$$
SELECT f1();
SELECT body FROM mysql.proc WHERE db='test' AND specific_name='f1';
DROP FUNCTION f1;

--echo #
--echo # End of 10.2 tests
--echo #

--echo #
--echo # MDEV-25501 routine_definition in information_schema.routines loses tablename if it starts with an _ and is not backticked
--echo #
create table _t1 (a int);
create procedure p1() select * from _t1;
show create procedure p1;
select routine_definition from information_schema.routines where routine_schema=database() and specific_name='p1';
select body, body_utf8 from mysql.proc where name='p1';
drop procedure p1;
drop table _t1;

--echo #
--echo # End of 10.3 tests
--echo #

--echo #
--echo #  MDEV-22001: Server crashes in st_select_lex_unit::exclude_level upon execution of SP
--echo #
--delimiter $
BEGIN NOT ATOMIC DECLARE a INT DEFAULT 0 IN ( SELECT 1 ) OR 2 ; END $
BEGIN NOT ATOMIC DECLARE a INT DEFAULT 0 IN ( SELECT 1 ) OR (SELECT 2) ; END $
--delimiter ;

--error ER_NO_SUCH_THREAD
KILL  (('x' IN ( SELECT 1)) MOD 44);

--echo #
--echo # End of 10.4 tests
--echo #

--echo #
--echo #  MDEV-24935: Server crashes in Field_iterator_natural_join::next or Field_iterator_table_ref::set_field_iterator upon 2nd execution of SP
--echo #
CREATE TABLE t1 (a INT);
CREATE TABLE t2 (b INT, c INT);
CREATE TABLE t3 (d INT);
CREATE PROCEDURE sp() SELECT * FROM t1 JOIN t2 JOIN t3 USING (x);
--error ER_BAD_FIELD_ERROR
CALL sp;
--error ER_BAD_FIELD_ERROR
CALL sp;
--echo # Clean up
DROP PROCEDURE sp;
DROP TABLE t1, t2, t3;

CREATE TABLE t1 (c1 INT,c2 INT);
CREATE TABLE t2 (c INT,c2 INT);
CREATE PROCEDURE p2 (OUT i INT,OUT o INT) READS SQL DATA DELETE a2,a3 FROM t1 AS a1 JOIN t2 AS a2 NATURAL JOIN t2 AS a3;

--error ER_NON_UNIQ_ERROR
CALL p2 (@c,@a);
--error ER_NON_UNIQ_ERROR
CALL p2 (@a,@c);
--echo # Clean up
DROP PROCEDURE p2;
DROP TABLE t1, t2;

--echo #
--echo # MDEV-34501: SIGSEGV in pfs_start_mutex_wait_v1, __strlen_avx2, or __strlen_evex from safe_mutex_lock on CREATE DEFINER when using skip-grant-tables
--echo #
--echo # This test is a duplicate of the one located in the file skip_grants.test
--echo # and placed here to check the same test case against embedded-server

# Disable warnings before running the following CREATE PROCEDURE/FUNCTION
# statement since the warning message
#   "The user specified as a definer ('a'@'%') does not exist"
# is output in case the test be run against a regular server
# and isn't output if embedded server is used (@sa sp_process_definer()
# in sql_parse.cc).
--disable_warnings
CREATE DEFINER=a PROCEDURE p() SELECT 1;
CREATE DEFINER=a FUNCTION f() RETURNS INT RETURN 100;
--enable_warnings

DROP PROCEDURE p;
DROP FUNCTION f;

--echo #
--echo # End of 10.5 tests
--echo #

--echo #
--echo # MDEV-36876 Crash during the Item_subselect::init - outer_select is NULL
--echo #
--echo # Vectors are not allowed for SOME/ANY
--error ER_OPERAND_COLUMNS
select row(1, 2) = some(select row(1, 2));
--echo # Fine
select 1 = some(select 1) = all(select 1);
--echo # Comparison between vector and scalar
--error ER_OPERAND_COLUMNS
select row(1, 2) = some(select 1) = all(select 1);

--echo # Same
--error ER_OPERAND_COLUMNS
create table t1 (dt datetime(6) default row(1, 2) = some(select 1) = all(select 1));

delimiter $$;
create procedure test_proc (id varchar(255))
begin
  declare dt datetime(6) default row(1, 2) = some(select 1) = all(select 1);
end$$
delimiter ;$$

drop procedure test_proc;

--echo #
--echo # End of 11.8 tests
--echo #

[Dauer der Verarbeitung: 0.24 Sekunden, vorverarbeitet 2026-10-08]