You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/test/tap/mytap-event.sql

308 lines
8.3 KiB

-- EVENTS
-- ======
-- >= 5.5
USE tap;
DELIMITER //
/************************************************************************************/
-- Is the scheduler process running
DROP FUNCTION IF EXISTS _scheduler //
CREATE FUNCTION _scheduler()
RETURNS VARCHAR(3)
DETERMINISTIC
BEGIN
DECLARE ret VARCHAR(3);
SELECT @@GLOBAL.event_scheduler INTO ret;
RETURN ret;
END //
DROP FUNCTION IF EXISTS scheduler_is //
CREATE FUNCTION scheduler_is(want VARCHAR(3), description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
IF description = '' THEN
SET description = 'Event scheduler process should be correctly set';
END IF;
RETURN eq(_scheduler(), want, description);
END //
DROP FUNCTION IF EXISTS _has_event //
CREATE FUNCTION _has_event(sname VARCHAR(64), ename VARCHAR(64))
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
DECLARE ret BOOLEAN;
SELECT 1 INTO ret
FROM `information_schema`.`events`
WHERE `event_schema` = sname
AND `event_name` = ename;
RETURN COALESCE(ret, 0);
END //
DROP FUNCTION IF EXISTS has_event //
CREATE FUNCTION has_event(sname VARCHAR(64), ename VARCHAR(64), description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
IF description = '' THEN
SET description = CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' should exist');
END IF;
IF NOT _has_schema(sname) THEN
RETURN CONCAT(ok(FALSE, description), '\n',
diag(CONCAT('Schema ', quote_ident(sname), ' does not exist')));
END IF;
RETURN ok(_has_event(sname, ename), description);
END //
DROP FUNCTION IF EXISTS hasnt_event //
CREATE FUNCTION hasnt_event(sname VARCHAR(64), ename VARCHAR(64), description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
IF description = '' THEN
SET description = CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' should not exist');
END IF;
IF NOT _has_schema(sname) THEN
RETURN CONCAT(ok(FALSE, description), '\n',
diag(CONCAT('Schema ', quote_ident(sname), ' does not exist')));
END IF;
RETURN ok(NOT _has_event(sname, ename), description);
END //
/****************************************************************************/
-- EVENT TYPE
-- { ONE TIME | RECURRING }
DROP FUNCTION IF EXISTS _event_type //
CREATE FUNCTION _event_type(sname VARCHAR(64), ename VARCHAR(64))
RETURNS VARCHAR(9)
DETERMINISTIC
BEGIN
DECLARE ret VARCHAR(9);
SELECT `event_type` INTO ret
FROM `information_schema`.`events`
WHERE `event_schema` = sname
AND `event_name` = ename;
RETURN ret;
END //
DROP FUNCTION IF EXISTS event_type_is //
CREATE FUNCTION event_type_is(sname VARCHAR(64), ename VARCHAR(64), etype VARCHAR(9), description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE valid ENUM('ONE TIME','RECURRING');
DECLARE CONTINUE HANDLER FOR 1265
RETURN CONCAT(ok(FALSE, description), '\n',
diag('Event Type must be { ONE TIME | RECURRING }'));
IF description = '' THEN
SET description = CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' should have Event Type ', qv(etype));
END IF;
SET valid = etype;
IF NOT _has_event(sname,ename) THEN
RETURN CONCAT(ok(FALSE, description), '\n',
diag(CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' does not exist')));
END IF;
RETURN eq(_event_type(sname, ename), etype, description);
END //
/****************************************************************************/
-- INTERVAL_VALUE for recurring events
-- VARCHAR(256) ALLOWS NULL
-- stores a number as a string!
DROP FUNCTION IF EXISTS _event_interval_value //
CREATE FUNCTION _event_interval_value(sname VARCHAR(64), ename VARCHAR(64))
RETURNS VARCHAR(256)
DETERMINISTIC
BEGIN
DECLARE ret VARCHAR(256);
SELECT `interval_value` INTO ret
FROM `information_schema`.`events`
WHERE `event_schema` = sname
AND `event_name` = ename;
RETURN ret;
END //
DROP FUNCTION IF EXISTS event_interval_value_is //
CREATE FUNCTION event_interval_value_is(sname VARCHAR(64), ename VARCHAR(64), ivalue VARCHAR(256), description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
IF description = '' THEN
SET description = CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' should have Interval Value ', qv(ivalue));
END IF;
IF NOT _has_event(sname,ename) THEN
RETURN CONCAT(ok(FALSE, description), '\n',
diag(CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' does not exist')));
END IF;
RETURN eq(_event_interval_value(sname, ename), ivalue, description);
END //
/****************************************************************************/
-- INTERVAL_FIELD for recurring events
-- VARCHAR(18) ALLOWS NULL
-- HOUR, DAY, WEEK etc
DROP FUNCTION IF EXISTS _event_interval_field //
CREATE FUNCTION _event_interval_field(sname VARCHAR(64), ename VARCHAR(64))
RETURNS VARCHAR(18)
DETERMINISTIC
BEGIN
DECLARE ret VARCHAR(18);
SELECT `interval_field` INTO ret
FROM `information_schema`.`events`
WHERE `event_schema` = sname
AND `event_name` = ename;
RETURN ret;
END //
DROP FUNCTION IF EXISTS event_interval_field_is //
CREATE FUNCTION event_interval_field_is(sname VARCHAR(64), ename VARCHAR(64), ifield VARCHAR(18), description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE valid ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE ',
'WEEK','SECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE',
'DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND');
DECLARE CONTINUE HANDLER FOR 1265
RETURN CONCAT(ok(FALSE, description), '\n',
diag('Event Interval must be { YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND }'));
IF description = '' THEN
SET description = CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' should have Interval Field ', qv(ifield));
END IF;
SET valid = ifield;
IF NOT _has_event(sname,ename) THEN
RETURN CONCAT(ok(FALSE, description), '\n',
diag(CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' does not exist')));
END IF;
RETURN eq(_event_interval_field(sname, ename), ifield, description);
END //
/****************************************************************************/
-- STATUS
-- { ENABLED | DISABLED | SLAVESIDE DISABLED }
DROP FUNCTION IF EXISTS _event_status //
CREATE FUNCTION _event_status(sname VARCHAR(64), ename VARCHAR(64))
RETURNS VARCHAR(18)
DETERMINISTIC
BEGIN
DECLARE ret VARCHAR(18);
SELECT `status` INTO ret
FROM `information_schema`.`events`
WHERE `event_schema` = sname
AND `event_name` = ename;
RETURN ret;
END //
DROP FUNCTION IF EXISTS event_status_is //
CREATE FUNCTION event_status_is(sname VARCHAR(64), ename VARCHAR(64), stat VARCHAR(18), description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE valid ENUM('ENABLED','DISABLED','SLAVESIDE DISABLED');
DECLARE CONTINUE HANDLER FOR 1265
RETURN CONCAT(ok(FALSE, description), '\n',
diag('Event Status must be { ENABLED | DISABLED | SLAVESIDE DISABLED }'));
IF description = '' THEN
SET description = CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' should have Status ', qv(stat));
END IF;
SET valid = stat;
IF NOT _has_event(sname,ename) THEN
RETURN CONCAT(ok(FALSE, description), '\n',
diag(CONCAT('Event ', quote_ident(sname), '.', quote_ident(ename),
' does not exist')));
END IF;
RETURN eq(_event_status(sname, ename), stat, description);
END //
/****************************************************************************/
-- Check that the proper events are defined
DROP FUNCTION IF EXISTS events_are //
CREATE FUNCTION events_are(sname VARCHAR(64), want TEXT, description TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
SET @want = want;
SET @have = (SELECT GROUP_CONCAT('`',`event_name`,'`')
FROM `information_schema`.`events`
WHERE `event_schema` = sname);
IF description = '' THEN
SET description = CONCAT('Schema ', quote_ident(sname), ' should have the correct Events');
END IF;
IF NOT _has_schema(sname) THEN
RETURN CONCAT( ok(FALSE, description), '\n',
diag(CONCAT('Schema ', quote_ident(sname), ' does not exist' )));
END IF;
CALL _populate_want(@want);
CALL _populate_have(@have);
SET @missing = (SELECT _missing(@have));
SET @extras = (SELECT _extra(@want));
RETURN _are('events', @extras, @missing, description);
END //
DELIMITER ;