mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-18813 PROCEDURE and anonymous blocks silently ignore FETCH GROUP NEXT ROW
Part#2 (final): rewritting the code to pass the correct enum_sp_aggregate_type to the sp_head constructor, so sp_head never changes its aggregation type later on. The grammar has been simplified and defragmented. This allowed to check aggregate specific instructions right after a routine body has been scanned, by calling new LEX methods: sp_body_finalize_{procedure|function|trigger|event}() Moving some C++ code from *.yy to a few new helper methods in LEX.
This commit is contained in:
@ -11,7 +11,7 @@ set x=5;
|
||||
fetch group next row;
|
||||
return x+1;
|
||||
end |
|
||||
ERROR HY000: Non-aggregate function contains aggregate specific instructions: (FETCH GROUP NEXT ROW)
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
CREATE TABLE marks(stud_id INT, grade_count INT);
|
||||
INSERT INTO marks VALUES (1,6), (2,4), (3,7), (4,5), (5,8);
|
||||
SELECT * FROM marks;
|
||||
@ -56,3 +56,81 @@ aggregate_count(stud_id)
|
||||
5
|
||||
DROP FUNCTION IF EXISTS aggregate_count;
|
||||
DROP TABLE marks;
|
||||
#
|
||||
# MDEV-18813 PROCEDURE and anonymous blocks silently ignore FETCH GROUP NEXT ROW
|
||||
#
|
||||
CREATE PROCEDURE p1 AS
|
||||
BEGIN
|
||||
FETCH GROUP NEXT ROW;
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
BEGIN NOT ATOMIC
|
||||
FETCH GROUP NEXT ROW;
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
CREATE DEFINER=root@localhost FUNCTION f1 RETURN INT AS
|
||||
BEGIN
|
||||
FETCH GROUP NEXT ROW;
|
||||
RETURN 0;
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TRIGGER tr1
|
||||
AFTER INSERT ON t1 FOR EACH ROW
|
||||
FETCH GROUP NEXT ROW;
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
DROP TABLE t1;
|
||||
CREATE 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;
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
CREATE PACKAGE pkg1 AS
|
||||
PROCEDURE p1;
|
||||
FUNCTION f1 RETURN INT;
|
||||
END;
|
||||
$$
|
||||
CREATE PACKAGE BODY pkg1 AS
|
||||
PROCEDURE p1 AS
|
||||
BEGIN
|
||||
FETCH GROUP NEXT ROW; -- In a package procedure
|
||||
END;
|
||||
FUNCTION f1 RETURN INT AS
|
||||
BEGIN
|
||||
RETURN 0;
|
||||
END;
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
CREATE PACKAGE BODY pkg1 AS
|
||||
PROCEDURE p1 AS
|
||||
BEGIN
|
||||
NULL;
|
||||
END;
|
||||
FUNCTION f1 RETURN INT AS
|
||||
BEGIN
|
||||
FETCH GROUP NEXT ROW; -- In a package function
|
||||
RETURN 0;
|
||||
END;
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
CREATE PACKAGE BODY pkg1 AS
|
||||
PROCEDURE p1 AS
|
||||
BEGIN
|
||||
NULL;
|
||||
END;
|
||||
FUNCTION f1 RETURN INT AS
|
||||
BEGIN
|
||||
RETURN 0;
|
||||
END;
|
||||
BEGIN
|
||||
FETCH GROUP NEXT ROW; -- In a package executable section
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context
|
||||
DROP PACKAGE pkg1;
|
||||
|
Reference in New Issue
Block a user