SELECT GROUP_CONCAT(CONCAT('PARTITION p',a.date_string,' VALUES LESS THAN (',a.date_limit,')'))
INTO l_new_partitions
FROM tmp_partition_days a
WHERE a.date_string NOTIN(SELECTRIGHT(partition_name,8)
FROM information_schema.partitions
WHERE table_name = l_table_name)
ORDERBY a.date_string ASC;
IF(l_new_partitions ISNOTNULL) THEN
-- create new partitions by reorganizing the last partition (always pEOW)
SET sql_make_partitions = CONCAT('ALTER TABLE `',l_table_name,'` REORGANIZE PARTITION pEOW INTO (',l_new_partitions,', PARTITION pEOW VALUES LESS THAN MAXVALUE)');
SET @sqlstatement = sql_make_partitions;
PREPARE sqlquery FROM @sqlstatement;
EXECUTE sqlquery;
DEALLOCATE PREPARE sqlquery;
END IF;
-- find and drop partitions older than p_retention_days
SELECT GROUP_CONCAT(partition_name)
INTO l_old_partitions
FROM information_schema.partitions
WHERERIGHT(partition_name,8) < l_cutoff_date
AND partition_name <> 'pEOW'
AND table_name = l_table_name;
IF(l_old_partitions ISNOTNULL) THEN
SET sql_drop_partitions = CONCAT('ALTER TABLE `',l_table_name,'` DROP PARTITION ',l_old_partitions);
SET @sqlstatement = sql_drop_partitions;
PREPARE sqlquery FROM @sqlstatement;
EXECUTE sqlquery;
DEALLOCATE PREPARE sqlquery;
END IF;
-- close cursor
END IF;
UNTIL done END REPEAT;
CLOSE c_table_name;
END $$
DROP EVENT IFEXISTS`db_stats`.`e_rotate_archive_partitions`$$