Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  ps_in_func-commit.test  Sprache: unbekannt

 
Spracherkennung für: .test vermutete Sprache: SQL {SQL[90] Masm[88] Lisp[44]} [Methode: maximale Elemente, drei Dimensionen]

--source include/have_innodb.inc

--echo #
--echo # MDEV-39518 Allow prepared statements in stored functions in assignment right hand
--echo #

# Statements causing implicit or explicit commit are not allowed in functions
# - DDL statements
# - COMMIT

--echo #
--echo # PREPARE/EXECUTE/DEALLOCATE
--echo #

DELIMITER $$;
CREATE FUNCTION f1(query TEXT) RETURNS INT
BEGIN
  DECLARE nrows INT;
  PREPARE stmt FROM query;
  EXECUTE stmt;
  SET nrows= ROW_COUNT();
  DEALLOCATE PREPARE stmt;
  RETURN nrows;
END;
$$
CREATE PROCEDURE p1(query TEXT)
BEGIN
  DECLARE nrows INT;
  SET nrows= f1(query);
  SELECT nrows;
  SELECT * FROM t1;
END;
$$
DELIMITER ;$$
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('CREATE TABLE t1 (a INT)');
CREATE TABLE t1 (a INT);
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('ALTER TABLE t1 MODIFY a BIGINT');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('DROP TABLE t1');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('START TRANSACTION');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('COMMIT');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('ROLLBACK');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('LOCK TABLES t1 READ');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('LOCK TABLES t1 WRITE');
DROP TABLE t1;
DROP PROCEDURE p1;
DROP FUNCTION f1;


--echo #
--echo # Same as above but with EXECUTE IMMEDIATE
--echo # Statements causing implicit or explicit commit are not allowed, e.g:
--echo # - DDL statements
--echo # - COMMIT
--echo # Even in assignment context
--echo #

DELIMITER $$;
CREATE FUNCTION f1(query TEXT) RETURNS INT
BEGIN
  DECLARE nrows INT;
  EXECUTE IMMEDIATE query;
  SET nrows= ROW_COUNT();
  RETURN nrows;
END;
$$
CREATE PROCEDURE p1(query TEXT)
BEGIN
  DECLARE nrows INT;
  SET nrows= f1(query);
  SELECT nrows;
  SELECT * FROM t1;
END;
$$
DELIMITER ;$$
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('CREATE TABLE t1 (a INT)');
CREATE TABLE t1 (a INT);
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('ALTER TABLE t1 MODIFY a BIGINT');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('DROP TABLE t1');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('START TRANSACTION');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('COMMIT');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('ROLLBACK');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('LOCK TABLES t1 READ');
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1('LOCK TABLES t1 WRITE');
DROP TABLE t1;
DROP PROCEDURE p1;
DROP FUNCTION f1;


--echo #
--echo # MDEV-40225 Assertion `!thd->in_sub_stmt && !(thd->state_flags & Open_tables_state::BACKUPS_AVAIL)' failed in int Locked_tables_list::unlock_locked_tables(THD *)
--echo #

CREATE TABLE t1(a INT);
DELIMITER $$;
CREATE FUNCTION f() RETURNS INT
BEGIN
  EXECUTE IMMEDIATE 'LOCK TABLES t1 WRITE';
  RETURN 1;
END;
$$
CREATE PROCEDURE p()
BEGIN
  DECLARE v INT DEFAULT f();
END;
$$
DELIMITER ;$$
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p();
DROP PROCEDURE p;
DROP FUNCTION f;
DROP TABLE t1;

--echo #
--echo # MDEV-40890 ROLLBACK TO SAVEPOINT crashes the server
--echo #

CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (10);
DELIMITER $$;
CREATE FUNCTION f1() RETURNS INT
BEGIN
  SAVEPOINT s;
  UPDATE t1 SET a=11;
  ROLLBACK TO SAVEPOINT s;
  RETURN 1;
END;
$$
CREATE PROCEDURE p1()
BEGIN
  DECLARE a INT DEFAULT f1();
END;
$$
DELIMITER ;$$
START TRANSACTION;
CALL p1;
COMMIT;
SELECT * FROM t1;
DROP PROCEDURE p1;
DROP FUNCTION f1;
DROP TABLE t1;


CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (10);
DELIMITER $$;
CREATE FUNCTION f1() RETURNS INT
BEGIN
  EXECUTE IMMEDIATE 'SAVEPOINT s';
  UPDATE t1 SET a=11;
  EXECUTE IMMEDIATE 'ROLLBACK TO SAVEPOINT s';
  RETURN 1;
END;
$$
CREATE PROCEDURE p1()
BEGIN
  DECLARE a INT DEFAULT f1();
END;
$$
DELIMITER ;$$
START TRANSACTION;
CALL p1;
COMMIT;
SELECT * FROM t1;
DROP PROCEDURE p1;
DROP FUNCTION f1;
DROP TABLE t1;


--echo # End of 13.1 tests

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

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1867298