WITH RECURSIVE dates AS (
SELECT
DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE()) - 1 DAY) AS dt -- First day of current month
UNION ALL
SELECT
DATE_ADD(dt, INTERVAL 1 DAY)
FROM
dates
WHERE
dt < LAST_DAY(CURDATE()) -- Last day of current month
)
SELECT
dt AS calendar_date
FROM
dates;