[MDEV-18813] PROCEDURE and anonymous blocks silently ignore FETCH GROUP NEXT ROW Created: 2019-03-04  Updated: 2019-03-07  Resolved: 2019-03-07

Status: Closed
Project: MariaDB Server
Component/s: Stored routines
Affects Version/s: 10.3, 10.4
Fix Version/s: 10.4.4

Type: Bug Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Blocks
blocks MDEV-12518 Unify sql_yacc.yy and sql_yacc_ora.yy Closed

 Description   

The FETCH GROUP NEXT ROW statement is accepted in various unexpected contexts.

Procedures

DELIMITER $$
CREATE OR REPLACE PROCEDURE p1()
BEGIN
  FETCH GROUP NEXT ROW;
END;
$$
DELIMITER ;
CALL p1;

It silently compiles and executes the procedure. The FETCH GROUP NEXT ROW is silently ignored.
It should probably return an error at compile time, like inside a non-aggregate FUNCTION.

Anonymous blocks

The same problem is repeatable with anonymous blocks:

DELIMITER $$
BEGIN NOT ATOMIC
  FETCH GROUP NEXT ROW;
END;
$$
DELIMITER ;

Non-aggregate functions with DEFINER

If I add the DEFINER clause into a non-aggregate function, FETCH GROUP NEXT ROW is silently accepted:

DELIMITER $$
CREATE OR REPLACE DEFINER=root@localhost  FUNCTION f1() RETURNS INT
BEGIN
  FETCH GROUP NEXT ROW;
  RETURN 0;
END;
$$

Triggers

CREATE OR REPLACE TABLE t1 (a INT);
CREATE OR REPLACE TRIGGER tr1
  AFTER INSERT ON t1 FOR EACH ROW 
   FETCH GROUP NEXT ROW;

Events

CREATE OR REPLACE EVENT ev1
  ON SCHEDULE EVERY 1 HOUR
  STARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
  ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK
DO FETCH GROUP NEXT ROW;

Package body (10.4.4 only)

SET sql_mode=ORACLE;
DELIMITER $$
CREATE OR REPLACE PACKAGE pkg1 AS
  PROCEDURE p1;
END;
CREATE OR REPLACE PACKAGE BODY pkg1 AS
  PROCEDURE p1 AS
  BEGIN
    NULL;
  END;
BEGIN
  FETCH GROUP NEXT ROW;
END;
$$
DELIMITER ;


Generated at Thu Feb 08 08:46:55 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.