USE `vn`; DROP procedure IF EXISTS `zone_getEvents`; DELIMITER $$ USE `vn`$$ CREATE DEFINER=`root`@`%` PROCEDURE `zone_getEvents`( vProvinceFk INT, vPostCode VARCHAR(255), vAgencyModeFk INT) BEGIN /** * Returns available events for the passed province/postcode and agency. * * @param vAgencyModeFk The agency mode id * @param vProvinceFk The province id * @param vPostCode The postcode or %NULL to use the province */ DECLARE vGeoFk INT; IF vPostCode IS NOT NULL THEN SELECT p.geoFk INTO vGeoFk FROM postCode p JOIN town t ON t.id = p.townFk WHERE p.`code` = vPostCode AND t.provinceFk = vProvinceFk; ELSE SELECT geoFk INTO vGeoFk FROM province WHERE id = vProvinceFk; END IF; CALL zone_getFromGeo(vGeoFk); IF vAgencyModeFk IS NOT NULL THEN DELETE t FROM tmp.zone t JOIN zone z ON z.id = t.id WHERE z.agencyModeFk != vAgencyModeFk; END IF; SELECT e.zoneFk, e.`type`, e.dated, e.`started`, e.`ended`, e.weekDays FROM tmp.zone t JOIN zoneEvent e ON e.zoneFk = t.id; SELECT e.zoneFk, e.dated FROM tmp.zone t JOIN zoneExclusion e ON e.zoneFk = t.id; DROP TEMPORARY TABLE tmp.zone; END$$ DELIMITER ;