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:
@ -965,3 +965,54 @@ select i, sum(i) from t1 group by i with rollup;
|
||||
# Cleanup
|
||||
drop function agg_sum;
|
||||
drop table t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18813 PROCEDURE and anonymous blocks silently ignore FETCH GROUP NEXT ROW
|
||||
--echo #
|
||||
|
||||
|
||||
DELIMITER $$;
|
||||
--error ER_NOT_AGGREGATE_FUNCTION
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
FETCH GROUP NEXT ROW;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
||||
|
||||
DELIMITER $$;
|
||||
--error ER_NOT_AGGREGATE_FUNCTION
|
||||
BEGIN NOT ATOMIC
|
||||
FETCH GROUP NEXT ROW;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
||||
|
||||
DELIMITER $$;
|
||||
--error ER_NOT_AGGREGATE_FUNCTION
|
||||
CREATE DEFINER=root@localhost FUNCTION f1() RETURNS INT
|
||||
BEGIN
|
||||
FETCH GROUP NEXT ROW;
|
||||
RETURN 0;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
--error ER_NOT_AGGREGATE_FUNCTION
|
||||
CREATE TRIGGER tr1
|
||||
AFTER INSERT ON t1 FOR EACH ROW
|
||||
FETCH GROUP NEXT ROW;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--error ER_NOT_AGGREGATE_FUNCTION
|
||||
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;
|
||||
|
Reference in New Issue
Block a user